Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Процедура на вставку данных с возвратом значения  [new]
ness_co
Member

Откуда:
Сообщений: 2
Доброго.

Хочу выполнить вставку данных в несколько связанных таблиц и получить назад ID записи для установки фокуса на даннуя запись в гриде.
Текс процедуры:
create or alter procedure P_GOODS_INS (
    GG_ID integer,
    G_NAME varchar(100),
    G_NAME_FOR_PRINT varchar(100),
    G_PRICE numeric(15,8),
    G_USED blob sub_type 0 segment size 80,
    P_ID integer,
    GBC_BAR_CODE varchar(20))
returns (
    G_ID integer)
as
declare variable G_ID integer;
declare variable PG_ID integer;
declare variable GBC_ID integer;
begin
    SELECT NEXT VALUE FOR gen_goods_id FROM RDB$DATABASE into :G_ID;
    SELECT NEXT VALUE FOR gen_packing_goods_id FROM RDB$DATABASE into :PG_ID;
    SELECT NEXT VALUE FOR gen_goods_bar_code_id FROM RDB$DATABASE into :GBC_ID;
    
    
    insert into GOODS (G_ID, GG_ID, G_NAME, G_NAME_FOR_PRINT, G_PRICE, G_USED)
    values (:G_ID, :GG_ID, :G_NAME, :G_NAME_FOR_PRINT, :G_PRICE, :G_USED);
    
    insert into PACKING_GOODS (PG_ID, G_ID, P_ID, PG_COEFFICIENT, PG_DEFAULT, PG_BASE, PG_FOR_SALE, PG_FOR_ORDER, PG_USED)
    values (:PG_ID, :G_ID, :P_ID, 1, 1, 1, 1, 1, 1);
    
    insert into GOODS_BAR_CODE (GBC_ID, G_ID, PG_ID, GBC_BAR_CODE, GBC_DEFAULT, GBC_USED)
    values (:GBC_ID, :G_ID, :PG_ID, :GBC_BAR_CODE, 1, 1);
  --suspend;
  --return G_ID;
end^

При компиляции процедуры получаю ошибку:
variable redeclared: 'G_ID'

на строку
returns (
    G_ID integer)
29 сен 19, 22:53    [21982203]     Ответить | Цитировать Сообщить модератору
 Re: Процедура на вставку данных с возвратом значения  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10102
ness_co,

в словаре перевод ошибки посмотреть не догадались?
29 сен 19, 22:59    [21982206]     Ответить | Цитировать Сообщить модератору
 Re: Процедура на вставку данных с возвратом значения  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4013
ness_co,

Ну так а зачем ты два параметра объявил с одинаковым именем?
29 сен 19, 23:01    [21982207]     Ответить | Цитировать Сообщить модератору
 Re: Процедура на вставку данных с возвратом значения  [new]
ness_co
Member

Откуда:
Сообщений: 2
YuRock,

Спасибо. протупил.
29 сен 19, 23:15    [21982212]     Ответить | Цитировать Сообщить модератору
 Re: Процедура на вставку данных с возвратом значения  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28301
ness_co
SELECT NEXT VALUE FOR gen_goods_id FROM RDB$DATABASE into :G_ID;


господи помилуй, зачем в процедуре селектить из rdb$database? Это лишнее обращение к странице данных.

G_ID=NEXT VALUE FOR gen_goods_id;

или

G_ID=gen_id(gen_goods_id, 1);

и всё. Это же процедурный SQL.
29 сен 19, 23:26    [21982216]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить