Russian Qt Forum

Qt => Базы данных => Тема начата: rust3128 от Апрель 19, 2018, 10:46



Название: Firebird, создание и выполнение процедур
Отправлено: rust3128 от Апрель 19, 2018, 10:46
Доброго времени суток.
Необходимо на множестве баз выполнять запросы такого вида.
Код:
SET TERM ^ ;
create or alter procedure TMP1C_T1
as
declare variable ARTICLE_ID integer;
declare variable TERMINAL_ID smallint = 2142;
begin
    FOR select A.article_id from get_asaldos (:TERMINAL_ID, 9999, null, 0) GA
    join articles A on A.article_id = GA.article_id and A.terminal_id = :TERMINAL_ID
    where A.isactive = 'F'
    INTO :ARTICLE_ID
    DO
        update articles AR set AR.isactive = 'T'
        where AR.terminal_id = :TERMINAL_ID and AR.article_id = :ARTICLE_ID;
end^
SET TERM ; ^
GRANT EXECUTE ON PROCEDURE GET_ASALDOS TO PROCEDURE TMP1C_T1;
GRANT SELECT,UPDATE ON ARTICLES TO PROCEDURE TMP1C_T1;
GRANT EXECUTE ON PROCEDURE TMP1C_T1 TO SYSDBA;
execute procedure tmp1c_t1;

Каким образом его правильно скармливать QSqlQuery.
Или формировать скрипт и скармливать isql?

Буду благодарен за любые советы.
Спасибо.


Название: Re: Firebird, создание и выполнение процедур
Отправлено: joker от Май 04, 2018, 08:46
Не знаю, нужен ли еще ответ, но напишу.

Вобщем QSqlQuery прекрасно кушает ISQL, только скармливать надо по одной команде, хотя сможет ли правильно правильно отработать SET TERM не знаю.

ИЗМЕНЕНО

Попробуй как то так
Код:
QSqlQuery.execute("create or alter procedure TMP1C_T1
as
declare variable ARTICLE_ID integer;
declare variable TERMINAL_ID smallint = 2142;
begin
    FOR select A.article_id from get_asaldos (:TERMINAL_ID, 9999, null, 0) GA
    join articles A on A.article_id = GA.article_id and A.terminal_id = :TERMINAL_ID
    where A.isactive = 'F'
    INTO :ARTICLE_ID
    DO
        update articles AR set AR.isactive = 'T'
        where AR.terminal_id = :TERMINAL_ID and AR.article_id = :ARTICLE_ID;
end");

QSqlQuery.execute("GRANT EXECUTE ON PROCEDURE GET_ASALDOS TO PROCEDURE TMP1C_T1");
QSqlQuery.execute("GRANT SELECT,UPDATE ON ARTICLES TO PROCEDURE TMP1C_T1");
QSqlQuery.execute("GRANT EXECUTE ON PROCEDURE TMP1C_T1 TO SYSDBA");
QSqlQuery.execute("execute procedure tmp1c_t1");

И так далее
 


Название: Re: Firebird, создание и выполнение процедур
Отправлено: rust3128 от Май 07, 2018, 11:43
Спасибо за ответ. Сейчас опробуем.