Синтаксис
CREATE [ DBA
] PROCEDURE Prozedurname
( [ {
Parametername { Feldtyp | REFERENCES { BYTE
| TEXT } }
[ DEFAULT
{ Wert | NULL } ] } [,...] ] )
[ RETURNING
{ Feldtyp | REFERENCES { BYTE | TEXT } } ;
]
[ Statement
; ] [...]
END PROCEDURE ;
Описание
CREATE PROCEDURE создает процедуру базы данных (подпрограмму/функцию) , которая может быть использована в командах SQL или в процедурах и программах.
Пример:
CREATE PROCEDURE table_drop ( ) DROP TABLE proc_test; END PROCEDURE;
Создает процедуру 'table drop', которая удаляет при вызове таблицу 'proc_test'.
Указывает на то, что процедура имеет при исполнении привилегии администратора.
Пример:
CREATE DBA PROCEDURE table_create ( ) CREATE TABLE proc_test ( fid smallint, ag smallint, vsnr integer ); END PROCEDURE;
Создает процедуру 'table_create' с привилегиями администратора, которая создает при вызове новую таблицу в базе данных 'proc_test'.
REFERENCES { BYTE | TEXT }
DEFAULT специфицирует значение, которое используется, если в вызове процедуры опущен параметр.
Пример:
CREATE PROCEDURE square ( par INTEGER DEFAULT 0 ) RETURNING INTEGER; DEFINE rez INTEGER; LET rez = par * par; RETURN rez; END PROCEDURE;
Cоздает процедуру 'square', у которой единственный параметр 'par' не обязателен и по умолчанию равен нулю. Если эта процедура вызвана без параметров, то она возвращает 0*0 назад, иначе - par*par .
RETURNING { Feldtyp | REFERENCES { BYTE | TEXT } }
RETURNING указывает на количество и тип значений, которые возвращает процедура.
Пример:
CREATE PROCEDURE table_insert ( ) RETURNING INT; DEFINE i INT; INSERT INTO aam_proc_test ( fid, ag, vsnr ) VALUES ( 1, 2, 3 ); INSERT INTO aam_proc_test ( fid, ag, vsnr ) VALUES ( 0, 9, 9 ); LET i = SELECT COUNT(*) FROM proc_test; RETURN i; END PROCEDURE;
Здесь создается процедура 'table_insert', которая добавляет в таблицу 'proc_test' две новых строки данных и возвращает количество строк в этой таблице.
Ein SPL-Statement bzw. Befehl, z.B. DEFINE, RETURN, IF, FOR, SET, LET FOREACH, WHILE, usw.
Пример:
CREATE PROCEDURE table_run ( ) DEFINE i INT; SET ISOLATION TO dirty read; SET LOCK MODE to wait 60; SET PDQPRIORITY 5; CALL table_drop(); CALL table_create(); LET i = table_insert(); END PROCEDURE;
Создает процедуру 'table_run', которая вызывает некоторые другие процедуры и возвращает результат процедуры 'table_insert'.
Пример:
CREATE PROCEDURE table_show ( ) RETURNING INT, INT, INT; DEFINE my_fid, my_ag, my_vsnr INTEGER; CALL table_run(); FOREACH SELECT square(fid+1) fid, ag, vsnr INTO my_fid, my_ag, my_vsnr FROM proc_test RETURN my_fid, my_ag, my_vsnr WITH RESUME; END FOREACH; END PROCEDURE;
Создает процедуру 'table_show' , которая возвращает все строки таблицы proc_test, которые она до этого туда записала с помощью процедуры 'table_run'.