Russian Qt Forum
Март 29, 2024, 02:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Firebird, создание и выполнение процедур  (Прочитано 11807 раз)
rust3128
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Апрель 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?

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

Offline Offline

Сообщений: 49


Просмотр профиля
« Ответ #1 : Май 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");

И так далее
 
« Последнее редактирование: Май 04, 2018, 23:17 от joker » Записан
rust3128
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #2 : Май 07, 2018, 11:43 »

Спасибо за ответ. Сейчас опробуем.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 23.