--#INTERBASE
create or alter procedure arys_lpad_chk as
/* Процедура проверки наличия функции LPAD в базе: если такой функции нет, то объявляем ее */
/* Процедура создана для красоты - без нее батник, при повторном использовании, выдавал ошибку, т.к. функция объявлялась второй раз */
declare variable cnt numeric(1,0); declare variable stmt1 varchar(200); declare variable stmt2 varchar(200);
begin
select count(*) from rdb$functions where upper(rdb$function_name) = 'LPAD' into :cnt;
stmt1 = 'DECLARE EXTERNAL FUNCTION lpad CSTRING(255), INTEGER, CSTRING(1) RETURNS CSTRING(255) FREE_IT ENTRY_POINT ''IB_UDF_lpad'' MODULE_NAME ''ib_udf''';
stmt2 = 'DROP EXTERNAL FUNCTION lpad';
if(cnt=0) then
begin
execute statement :stmt1;
end
else
begin
execute statement :stmt2;
execute statement :stmt1;
end
end;
--#INTERBASE
execute procedure arys_lpad_chk
--#INTERBASE
drop procedure arys_lpad_chk
Показаны сообщения с ярлыком execute. Показать все сообщения
Показаны сообщения с ярлыком execute. Показать все сообщения
четверг, 29 июня 2017 г.
четверг, 17 ноября 2016 г.
Получение значения из SQL-запроса с вычисляемым наименованием колонки
/* Пример блочного выполнения PL/SQL с вычисляемым наименованием колонки в переменной myCOLUMN и запоминанием результата такого запроса в переменной myRESULT */
Для сравнения
Тот же пример, но без вычисляемого наименования колонки, т.е. без "execute immediate":
DECLARE
    myRESULT varchar(255);
    myCOLUMN varchar(255) := 'user_id';
BEGIN
    execute immediate 'select '||myCOLUMN||' from dba_users where rownum = 1' into myRESULT;
    dbms_output.put_line(myRESULT);
END;
Для сравнения
Тот же пример, но без вычисляемого наименования колонки, т.е. без "execute immediate":
DECLARE
    myRESULT varchar(255);
BEGIN
    select user_id into myRESULT from dba_users where rownum = 1;
    dbms_output.put_line(myRESULT);
END;
пятница, 13 ноября 2015 г.
Пример работы с исполняемыми блоками в Firebird (2.0 и выше)
execute block returns (i2 int) as declare i int = 0;
begin
while (i < 128) do
begin
i = i + 1;
i2 = i;
suspend;
end
end
begin
while (i < 128) do
begin
i = i + 1;
i2 = i;
suspend;
end
end
Подписаться на:
Сообщения (Atom)
Архив
-
►
2019
(44)
- декабря (2)
- октября (6)
- сентября (9)
- августа (1)
- июля (1)
- июня (2)
- мая (2)
- апреля (2)
- марта (2)
- февраля (9)
- января (8)
-
►
2018
(54)
- декабря (4)
- ноября (3)
- октября (6)
- сентября (4)
- августа (2)
- июля (2)
- мая (3)
- апреля (4)
- марта (11)
- февраля (6)
- января (9)
-
►
2017
(55)
- декабря (4)
- ноября (14)
- октября (1)
- сентября (3)
- августа (10)
- июля (2)
- июня (5)
- мая (2)
- апреля (3)
- марта (4)
- февраля (4)
- января (3)
-
►
2016
(111)
- декабря (12)
- ноября (4)
- октября (14)
- сентября (7)
- августа (7)
- июля (14)
- июня (12)
- мая (8)
- апреля (5)
- марта (16)
- февраля (10)
- января (2)
-
►
2015
(96)
- декабря (2)
- ноября (4)
- октября (3)
- сентября (6)
- августа (2)
- июля (2)
- июня (2)
- мая (11)
- апреля (14)
- марта (24)
- февраля (21)
- января (5)
-
►
2014
(72)
- декабря (18)
- ноября (16)
- октября (2)
- сентября (7)
- августа (4)
- июля (1)
- июня (4)
- мая (5)
- апреля (3)
- марта (3)
- февраля (6)
- января (3)
-
►
2013
(33)
- декабря (3)
- ноября (2)
- октября (3)
- сентября (2)
- августа (1)
- июля (1)
- июня (2)
- мая (5)
- апреля (2)
- марта (2)
- февраля (1)
- января (9)
-
►
2012
(181)
- ноября (6)
- октября (11)
- сентября (6)
- августа (5)
- июля (6)
- июня (25)
- мая (24)
- апреля (14)
- марта (20)
- февраля (38)
- января (26)