Читайте также: |
|
Эта сист поддерживает все элементы амер института. Эти элементы можно разделить на 3 основные области:
1) DOL – язык используется для запросов
2) DML(data manipulation language) – язык для обработки данных
3) DDL(DATA definitional language) – для определения структур данных
Кроме этого имеются
4) TCL – для управления транзакциями
5) DCL(DATA CONTROL LANGUAGE) – для регулирования доступа данных и использования правил доступа данных
В первой группе DOL относится к SQL
SELECT * | { [DISTINCT | ALL] выражения, …. }
FROM { имя таблицы [Псевдонимы] }, ….
[WHERE логическое выражения. ]
[GROUP BY {имя столб / целое число}, ….]
[HAVING лог. выражения]
[ORDER BY {имя столбца | целое число }, …]
DML
INSERT INTO имя таблицы [(имя столбца …)]
{VALUES (выражения, …)}
(Запрос)
INSERT INTO USER.PERSON (SURNAME, NAME)
VALUES(“Петров”,”Иван”)
UPDATE имя таблицы
SET имя столбца = выражению, …
[WERE логическое выражения]
UPDATE USER.PERSON
SET Surname = “Степанов”,
Name = “Александр”
WHERE ID = 42
DELETE FROM имя таблицы
[WHERE логическое выражения]
DELETE FROM USER.PERSON
WHERE ID = 42
DATA definitional language (DDL)
CREATE TABLE имя таблицы
(Имя таблицы Тип данных [(Размер)] [Not NULL], …)
ALTER TABLE имя таблицы
{DROP имя столбца}
| {ADD имя столбца Тип данных [(Размер)]} []Not NULL]}
| {MODIFY имя столб Тип данных [(Размер)] [Not NULL]}
DROP TABLE имя таблицы // удаляет описания таблицы с потерей всех данных
CREATE VIEW Имя представления [(Имя столб), …] AS запрос
DROP VIEW имя представления // удаляет представления
ALTER VIEW имя представления [(Имя столб), …] AS Запрос
CREATE [UNIQUE] INDEX Имя индекса
ON имя табл (имя столб, …)
ALTER [UNIQUE] INDEX Имя индекса
ON Имя табл (Имя столб, …)
DROP INDEX Имя индекса
DO $System.Securitg.Login(“_System”,”SYS”)
VIEW SQLCODE, %msg
& sql (CREATE TABLE Employee (
EMPNUM, INT NOT NULL,
NAME LOAST CHAR(30) NOT NULL,
…..
COMSTRAINT EMPLOUYEEPK PRIMARY KEY (EMPNUM)
)
IF SQLCODE = 0
{ write!, “Таблиця созданна”}
ELSE
{ W!, “SQLCODE: = ”, SQLCODE, “: ”, % msg }
SET g1 = “SELECT TOP 10 P.Name AS pn,E.Name AS en”
SET g2 = “ FROM SAMPLE.PERSON AS P,SAMPLE.EMPLOYER AS E”
Set myquery = g1 – g2
SET rset = #class(%RESULTSet).%New(“%DYNAMICQUERY:SQL”)
SET sc = rset.PREPARE(myquery)
SET = sc = rset.EXECUTE()
WHILE rset.NEXT()
{W!, rset.Data(“pn”),!, rset.Date(“en”) SET IDPERS = rset.Data(“ID”)}
W!, “Row count = ”, %ROWCOUNT
Передача параметров:
SET = myquery = “SELECT ID, Name, Age FROM Sample.Person WHERE Age >? AND Age <?”
SET rset = #class(%ResultSet.SQL).%Prepare(myquery.err,” “, e1, 26)
WHILE rset.NEXT()
{ W!, rset.Name, “, “, rset.Age}
24.04.2015
SET sql = 3
SET sql(1) = “DECLARE @vaz INT”
SET sql(2) = “SET @vaz = 4”
SET sql(3) = “SELECT TOP @vaz Name, Age FROM Sample.PERSON”
SET statement = ##class(%SQL.Statement).%New()
SET statement.%Dialect = “MSSQL”
SET status = statement.%Prepare(.sql)
SET result =statement.%Execute()
В терминале прописуем:
DO result.%Display()
В результате, то что получается в терминале:
NAME | AGE |
Сидоров | |
Петров |
2Rows Affect
Пример
S tSQL = 3
S tSQL(1) = “select %ID os id, Name, DOB, Home_State as Home, Age”
S tSQL(2) = “FROM Sample.PERSON WHERE Age >? AND Home [?’
S tSQL(3) = “ORDER BY 2”
S tStat(3) = $$class(%SQL.Statmeny).%New()
S tStatus = tStat.%Prepare(.tSQL)
S tRes = tStat.%Execute(50, “VT”)
WHILE tRes.%Next()
{
W!, “Имя”, tRes.Name, “ Home”,tRes.Home, “ Возраст”.tRes.Age, “ День рождения”,$zdt(tRes.DOB,4)]
Терминал
Do tRes.%Display()
Id | Name | DOB | Home |
Сидоров П.П. | 9/4/1969 | VT | |
Петров Л.П. | 8/12/2003 | VT |
Если у нас сформирован запрос в классе то можно использовать такое:
SET tSp = ##class(%SQL.Statment).%New()
SET tStatus = tsp.%PrepareClassQuery(“Sample.Person”, “Doctest”)
SET tRes = tSp.%Execute()
WHILE tRes.%Next()
{
…..
}
Пример 6
Непесредственно указан сам запрос
S tRes = ##class(%SQL.Statment).%ExecDirect(.tStatment,”select Name, Age, FROM Sample.Person WHERE Age >? AND Name =?”, 50, “ Александр”)
Терминал
DO tRes.%Display()
Property Age AS %Integer [Calculateed, SqlComputCode = {
Set {Age} /*необходимо записать значения*/ = ##class(Sample.Person).CurrentAge({DOB})},
SQLComputed, SqlChange = DOB];
ClassMethod CurrentAge(date AS %Date = “”) AS %Interger [CODE MODE = expression]
{
$Select(date = “”: “”, 1: ($zd($h, 8) - $D(date, 8) \ 10000))
}
Дата добавления: 2015-08-09; просмотров: 62 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Реляционная алгебра | | | Площадь 81 м2 , ЦЕНА: 810 т.руб. Площадь: 99 м2 , ЦЕНА: 950 т.руб |