Показаны сообщения с ярлыком execute. Показать все сообщения
Показаны сообщения с ярлыком execute. Показать все сообщения

четверг, 29 июня 2017 г.

Firebird: execute statement [пример]

--#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

четверг, 17 ноября 2016 г.

Получение значения из SQL-запроса с вычисляемым наименованием колонки

/* Пример блочного выполнения PL/SQL с вычисляемым наименованием колонки в переменной myCOLUMN и запоминанием результата такого запроса в переменной myRESULT */
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;

Архив