Руководство по языку sql
Download 1.22 Mb. Pdf ko'rish
|
Firebird3 SQL features
- Bu sahifa navigatsiya:
- BLOB SUB_TYPE TEXT ) AS DECLARE VARIABLE
- FROM RDB$RELATION_FIELDS WHERE
- ASCII_CHAR
- Объявление двунаправленного курсора
- Аргумент Описание
execute block returns (o char(31))
as declare c cursor for ( select rdb$relation_name name from rdb$relations ); begin open c; while (1 = 1) do begin fetch c; if (row_count = 0) then leave; o = c.name; suspend; end close c; end 2. Использование неявно объявленного курсора как курсорной переменной execute block returns (o char(31)) as begin for select rdb$relation_name name from rdb$relations as cursor c do begin o = c.name; suspend; end end 3. Разрешение неоднозначностей курсорной переменной внутри запросов execute block returns (o1 char(31), o2 char(31)) as begin for Новые возможности языка SQL Firebird 3.0 71 select rdb$relation_name from rdb$relations where rdb$relation_name = 'RDB$RELATIONS' as cursor c do begin for select -- с префиксом разрешается как курсор :c.rdb$relation_name x1, -- без префикса как псевдоним таблицы rdb$relations c.rdb$relation_name x2 from rdb$relations c where rdb$relation_name = 'RDB$DATABASE' as cursor d do begin o1 = d.x1; o2 = d.x2; suspend; end end end 4. Анонимный PSQL блок собирающий скрипты создания представлений EXECUTE BLOCK RETURNS ( SCRIPT BLOB SUB_TYPE TEXT) AS DECLARE VARIABLE FIELDS VARCHAR(8191); BEGIN FOR SELECT RDB$RELATION_NAME, RDB$VIEW_SOURCE FROM RDB$RELATIONS WHERE RDB$VIEW_SOURCE IS NOT NULL AS CURSOR CUR_R DO BEGIN FOR SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = :CUR_R.RDB$RELATION_NAME AS CURSOR CUR_F DO BEGIN Новые возможности языка SQL Firebird 3.0 72 IF (FIELDS IS NULL) THEN FIELDS = TRIM(CUR_F.RDB$FIELD_NAME); ELSE FIELDS = FIELDS || ', ' || TRIM(CUR_F.RDB$FIELD_NAME); END SCRIPT = 'CREATE VIEW ' || CUR_R.RDB$RELATION_NAME; IF (FIELDS IS NOT NULL) THEN SCRIPT = SCRIPT || ' (' || FIELDS || ')'; SCRIPT = SCRIPT || ' AS ' || ASCII_CHAR(13); SCRIPT = SCRIPT || CUR_R.RDB$VIEW_SOURCE; SUSPEND; END END Двунаправленные (прокручиваемые) курсоры В Firebird 3 появилась возможность объявление в заголовке PSQL модуля (хранимые процедуры, хранимые функции, триггеры, анонимные PSQL блоки) двунаправленных курсоров. Такие курсоры позволяют двигаться по набору данных не только вперѐд, но и назад, а также на N позиций относительно текущего положения. Двунаправленные курсоры используют буферизацию записей выборки, поэтому они работают несколько медленней однонаправленных курсоров. Объявление двунаправленного курсора Доступно: PSQL Синтаксис (полный): DECLARE [VARIABLE] CURSOR FOR ( Аргумент Описание cursor_name Имя курсора. select_statement Оператор SELECT. Описание: Оператор DECLARE … CURSOR FOR объявляет именованный курсор, связывая его с набором данных, полученного в операторе SELECT, указанного в предложении CURSOR FOR. Необязательное предложение SCROLL делает курсор двунаправленным (прокручиваемым), предложение NO SCROLL – однонаправленным. По умолчанию курсоры являются однонаправленными. Примечания: Новые возможности языка SQL Firebird 3.0 73 Предложение "FOR UPDATE" разрешено использовать в операторе SELECT, но оно не требуется для успешного выполнения позиционированного обновления или удаления; Удостоверьтесь, что объявленные имена курсоров не совпадают, ни с какими именами, определенными позже в предложениях AS CURSOR; Если курсор требуется только для прохода по результирующему набору данных, то практически всегда проще (и менее подвержено ошибкам) использовать оператор FOR SELECT с предложением AS CURSOR. Объявленные курсоры должны быть явно открыты, использованы для выборки данных и закрыты. Кроме того, вы должны проверить контекстную переменную row_count после каждой выборки и выйти из цикла, если еѐ значение ноль. Предложение FOR SELECT делает эту проверку автоматически. Однако объявленные курсоры дают большие возможности для контроля над последовательными событиями и позволяют управлять несколькими курсорами параллельно; Оператор SELECT может содержать параметры, например: “SELECT NAME || :SFX FROM NAMES WHERE NUMBER = :NUM ”. Каждый параметр должен быть заранее объявлен как переменная PSQL (это касается также входных и выходных параметров). При открытии курсора параметру присваивается текущее значение переменной. Download 1.22 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling