Руководство по языку sql


SET TERM ^;  --  -- Подпроцедуры в EXECUTE BLOCK  --  execute block returns


Download 1.22 Mb.
Pdf ko'rish
bet42/62
Sana23.04.2023
Hajmi1.22 Mb.
#1393455
1   ...   38   39   40   41   42   43   44   45   ...   62
Bog'liq
Firebird3 SQL features

SET TERM ^; 
-- 
-- Подпроцедуры в EXECUTE BLOCK 
-- 
execute block returns (name varchar(31)) 
as 
declare procedure get_tables
returns (table_name varchar(31)) 
as 
begin 
for select rdb$relation_name 
from rdb$relations 
where rdb$view_blr is null 
into table_name 
do 


Новые возможности языка SQL Firebird 3.0 
68 
suspend
end 
declare procedure get_views
returns (view_name varchar(31)) 
as 
begin 
for select rdb$relation_name 
from rdb$relations 
where rdb$view_blr is not null 
into view_name 
do 
suspend
end 
begin 
for select table_name 
from get_tables 
union all 
select view_name 
from get_views 
into name 
do 
suspend
end
-- 
-- Подфункция внутри хранимой функции 
-- 
CREATE OR ALTER FUNCTION FUNC1 (n1 INTEGER, n2 INTEGER
RETURNS INTEGER 
AS 
DECLARE FUNCTION SUBFUNC (n1 INTEGER, n2 INTEGER
RETURNS INTEGER 
AS 
BEGIN 
RETURN n1 + n2; 
END 
BEGIN 
RETURN SUBFUNC(n1, n2); 
END ^ 
-- 
select func1(5, 6) from rdb$database ^ 
Расширение использования префикса двоеточия 
До сих пор префикс двоеточие (:) использовался в PSQL, чтобы пометить 
ссылку на переменную в DML операторе. Его использование было расширено в 
Firebird 3 
для двух независимых целей: 


Новые возможности языка SQL Firebird 3.0 
69 
1. 
Позволить OLD/NEW полям в курсорах быть прочитанными и присваивать 
их переменным.
2. 
Сделать присвоение переменной в DML и PSQL операторах в модулях и 
блоках более гибким, и при необходимости разрешать неоднозначность 
между именами полей и именами переменных. 
Теперь подобный синтаксис не вызывает ошибки. 
create trigger t1 before insert on t1 
as 
declare v integer
begin 
:v = :old.n; 
:new.n = :v; 
end 
Ссылки на PSQL курсоры как на переменные 
Теперь в PSQL поддерживаются ссылки на курсоры, как на переменные типа 
запись. Текущая запись доступна через имя курсора для явных (DECLARE AS 
CURSOR
) и неявных (FOR SELECT) PSQL курсоров, что делает необязательным 
предложение INTO. 
Правила
1. 
Для разрешения неоднозначности при доступе к переменной курсора перед 
именем курсора необходим префикс двоеточие. 
2. 
К переменной курсора можно получить доступ без префикса двоеточия, но 
в этом случае, в зависимости от области видимости контекстов, 
существующих в запросе, имя может разрешиться как контекст запроса 
вместо курсора. 
3. 
Переменные курсора доступны только для чтения. 
4. 
В операторе FOR SELECT без предложения AS CURSOR необходимо 
использовать предложение INTO. Если указано предложение AS CURSOR, 
предложение INTO не требуется, но разрешено. 
5. 
В операторе FETCH предложение INTO необязательное. 
6. 
Чтение из переменной курсора возвращает текущие значения полей. Это 
означает, что оператор UPDATE (с предложением WHERE CURRENT OF) 
обновит также и значения полей в переменной курсора для последующих 
чтений. Выполнение оператора DELETE (с предложением WHERE 
CURRENT OF
) установит NULL для значений полей переменной курсора 
для последующих чтений. 
Замечание: 
 
Обратите внимание на использование двоеточие (:) в качестве префикса к ссылке 
на поле курсора. Ранее, префикс двоеточия использовался в PSQL только, чтобы 
пометить использование переменной или параметра в регулярном SQL-


Новые возможности языка SQL Firebird 3.0 
70 
операторе. В Firebird 3 использование двоеточия расширено для реализации 
механизма обработки непеременных, как будто они являются переменными.
Примеры
1. 
Использование явно объявленного курсора как курсорной переменной 

Download 1.22 Mb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   62




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling