powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / update/with recursive внутри execute ibeblock
8 сообщений из 8, страница 1 из 1
update/with recursive внутри execute ibeblock
    #39987951
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Автоматизирую выгрузку.
Версия ibexpert 2020.7.28.1
Планирую в дальнейшем через батник запускать IBEScript.exe my.scr
в некоторой таблице в значении храню дату предыдущей выгрузки.
в конце хочу сделать update
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
execute ibeblock
as
   declare variable LAST_EXPORT_1C_DATE varchar(19);
   declare variable CURRENT_EXPORT_1C_DATE varchar(19);
   declare variable str_path varchar(180);
begin
    str_path = 'd:\database\obmen-1c\';

    try
        CREATE CONNECTION Con1 DBNAME '127.0.0.1:work'
        USER 'sysdba' PASSWORD 'masterkey'
        clientlib 'c:\Program Files\Firebird\Firebird_3_0\fbclient.dll'
        sql_dialect 1 names win1251;
        try
            USE Con1;
            CURRENT_EXPORT_1C_DATE = ibec_Now;
            select first 1 PARAMVAL from parameters where PARAMNAME = 'LAST_EXPORT_1C_DATE' into :LAST_EXPORT_1C_DATE;

            --  ibec_MessageDlg(:LAST_EXPORT_1C_DATE ,2,4); --правильно отображает значение из таблицы
            --  ibec_MessageDlg(:CURRENT_EXPORT_1C_DATE ,2,4); 

            update parameters  set PARAMVAL=:NEW_EXPORT_1C_DATE where PARAMNAME = 'LAST_EXPORT_1C_DATE';
          FINALLY
            CLOSE CONNECTION Con1;
        end
    except
        ErrSQLCode = ibec_err_SQLCode();
        if (ErrSQLCode = -902) then
                    ibec_MessageDlg('Ошибка подключения к базе Firebyrd '||ibec_err_Message(), 1, 4);
                    else ibec_MessageDlg(ibec_err_Message(), 1, 4);
    end;   --try
end


Обновление параметра не происходит. (Такой параметр существует в таблице) Явно что то простейшее делаю не так?


Кроме того использовал запрос вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
execute ibeblock
as
   declare variable str varchar(19);
   declare variable str_path varchar(180);
begin
    str_path = 'd:\database\obmen-1c\';

    try
        CREATE CONNECTION Con1 DBNAME '127.0.0.1:work'
        USER 'sysdba' PASSWORD 'masterkey'
        clientlib 'c:\Program Files\Firebird\Firebird_3_0\fbclient.dll'
        sql_dialect 1 names win1251;
        try
            USE Con1;
            with recursive
                sprgroup_tree  (parentid,kod, name)
                as
                (
                select g1.parentid,kod,name from sprgroup g1
                where  g1.parentid =2
                union all
            
                select g2.parentid, g2.kod, cast(g2.name as varchar(100))
                from sprgroup g2 join sprgroup_tree s on g2.parentid = s.kod
                )
            select
              case  when parentid =2 then 0 else parentid end
                 as parentid,
                 kod,
                 name
             from sprgroup_tree
             EXPORT AS CSV INTO %path||'3spr-group.csv' OPTIONS 'OmitCaptions; Delimiter=;';

            FINALLY
                CLOSE CONNECTION Con1;    
        end
    except
        ErrSQLCode = ibec_err_SQLCode();
        if (ErrSQLCode = -902) then
                    ibec_MessageDlg('Ошибка подключения к базе Firebyrd '||ibec_err_Message(), 1, 4);
                    else ibec_MessageDlg(ibec_err_Message(), 1, 4);
    end;   --try
end


Спотыкается select case when parentid =2 then 0 else parentid end as parentid, kod, name from sprgroup_tree
Не знает что такое sprgroup_tree - не поддерживается with ?
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988017
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206

Обновление параметра не происходит. (Такой параметр существует в таблице) Явно что то простейшее делаю не так?


Простейшее НЕ делаешь: commit после апдейта. Само оно не закоммитится.
И CREATE CONNECTION, CLOSE CONNECTION, USE - deprecated, замени на ibec_CreateConnection, ibec_CloseConnection и ibec_UseConnection соответственно.
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988018
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206

Спотыкается select case when parentid =2 then 0 else parentid end as parentid, kod, name from sprgroup_tree
Не знает что такое sprgroup_tree - не поддерживается with ?


Кляуза EXPORT для WITH не поддерживается, только для SELECT. Но это мы полечим.
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988087
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert
Dmitriy_3206

Обновление параметра не происходит. (Такой параметр существует в таблице) Явно что то простейшее делаю не так?


Простейшее НЕ делаешь: commit после апдейта. Само оно не закоммитится.
И CREATE CONNECTION, CLOSE CONNECTION, USE - deprecated, замени на ibec_CreateConnection, ibec_CloseConnection и ibec_UseConnection соответственно.

Я явно не управлял и думал что Commit сам происходит не явно, по успешному завершении скрипта. А в справку не смотрел :(

К сожалению в справке по ibec_CreateConnection, ibec_CloseConnection и ibec_UseConnection очень кратко написано. А пример вообще...(в CREATE CONNECTION очень развернутый пример хотя и без try try FINALLY end except end ).
По этому было не очевидно собрать конструкцию:
Код: sql
1.
2.
Str_Connect = 'DBName="127.0.0.1:work"; User=SYSDBA; Password="masterkey"; Names=WIN1251; SqlDialect=1; clientlib="c:\Program Files\Firebird\Firebird_3_0\fbclient.dll"';
        Con1 = ibec_CreateConnection(__ctFirebird, Str_Connect);


И я так и не нашел в справке откуда брать константы:
Код: sql
1.
2.
__ctFirebird
__ctODBC





[quot IBExpert#22179971]
IBExpert

Кляуза EXPORT для WITH не поддерживается, только для SELECT. Но это мы полечим.

Здесь "маякнете", поставите отметку о том что уже можно пользоваться?
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988097
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206,

Firebird пишется через "i", а не через "y". А byrd - научная станция США в Антарктиде.

Удачи!
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988098
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206

По этому было не очевидно собрать конструкцию:


Кто ж их руками собирает? Лично я слишком ленив для этого.
Эксперт сам ее "соберет", достаточно перетащить ноду базы из дерева эксплорера БД в любой редактор кода в эксперте.
Руками разве что поправить что-то при необходимости.

Dmitriy_3206

И я так и не нашел в справке откуда брать константы:
Код: sql
1.
2.
__ctFirebird
__ctODBC




Зачем их откуда-то брать?

Dmitriy_3206

Здесь "маякнете", поставите отметку о том что уже можно пользоваться?


Это я уже исправил, но выложу только завтра, наверное.
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988160
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert
Dmitriy_3206

По этому было не очевидно собрать конструкцию:


Кто ж их руками собирает? Лично я слишком ленив для этого.
Эксперт сам ее "соберет", достаточно перетащить ноду базы из дерева эксплорера БД в любой редактор кода в эксперте.
Руками разве что поправить что-то при необходимости.

Внезапно - просто не знал о такой возможности :) - новое для себя открыл
...
Рейтинг: 0 / 0
update/with recursive внутри execute ibeblock
    #39988165
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AltHasp,


AltHasp
Dmitriy_3206,

Firebird пишется через "i", а не через "y". А byrd - научная станция США в Антарктиде.

Удачи!


Я даже не понял о чем Вы :)
Это копипаст который у меня много лет из скрипта в скрипт идёт. Не факт что даже мной написано )
Не в бровь а в глаз :)

Но если уж придираться то:
Объявил CURRENT_EXPORT_1C_DATE а в тексте PARAMVAL=:NEW_EXPORT_1C_DATE
declare variable str_path varchar(180); а использую EXPORT AS CSV INTO %path||'

И вообще сегодня геомагнитные бури ;)



...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / update/with recursive внутри execute ibeblock
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]