Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Вниз
Ошибка в ХП Найти похожие ветки
← →
Mike Kouzmine © (2004-05-14 23:52) [0]К вечеру голова не соображает вообще...
ALTER PROCEDURE ADD_FILIAL (
SCLAD INTEGER)
AS
DECLARE VARIABLE NUM INTEGER;
DECLARE VARIABLE NAME VARCHAR(20) CHARACTER SET WIN1251;
DECLARE VARIABLE FILIAL INTEGER;
begin
FILIAL = GEN_ID(GEN_SCLADS_ID,1);
INSERT INTO SCLADS
VALUES(:FILIAL, "НОВЫЙ ФИЛИАЛ",1,1);
FOR SELECT NUM, NAME FROM GROUPS
WHERE SCLAD = :SCLAD INTO :NUM, :NAME DO
BEGIN
INSERT INTO GROUPS
VALUES(:FILIAL , :NUM, :NAME);
END
end
SCLADS(INTEGER,VARCHAR,INTEGER,INTEGER)
GROUPS(INTEGER,INTEGER,VARCHAR)
Ошибка
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Count of read-write columns does not equal count of values.
Работаю в IB Expert
← →
Курдль © (2004-05-15 00:06) [1]
> INSERT INTO SCLADS
> VALUES(:FILIAL, "НОВЫЙ ФИЛИАЛ",1,1);
Здесь всего хватает? Я бы поля прописал...
← →
Mike Kouzmine © (2004-05-15 00:13) [2]Курдль © (15.05.04 00:06) [1] Если посмотреть пониже текста процедуры, то можно заметить структуры используемых таблиц.
← →
Курдль © (2004-05-15 00:26) [3]Ну а строчкой ниже: FOR SELECT NUM, NAME FROM GROUPS
В переменной типа запись SCLADS 4 поля, а выбираются для нее 2
← →
DrPass © (2004-05-15 00:29) [4]Я всегда придерживаюсь нескольких правил (просто так удобнее), например:
1. При выполнении INSERT явно указываю поля, по которым идет вставка
2. Не допускаю совпадений переменных и параметров с именами полей
3. Не делаю операций вида
FOR SELECT NUM, NAME FROM GROUPS ... DO...
INSERT INTO GROUPS
VALUES(:FILIAL , :NUM, :NAME);
потому как процедура, выбирающая записи и тут же вставляющая их в ту же самую таблицу, вполне способна вогнать IB в бесконечный цикл выборки-вставки (это фича такая)
Начни с реализации первого правила, если судить по твоей ошибке
← →
Mike Kouzmine © (2004-05-15 00:30) [5]Курдль © (15.05.04 00:26) [3] Не совсем понял. Поясни пожалуйста.
← →
Mike Kouzmine © (2004-05-15 00:34) [6]DrPass © (15.05.04 00:29) [4] Наверное ты прав, попробую. Но дело не в этом. Повидимому. Нормально компилировалась, но я изменил входящие параметры, после этого появилась ошибка.
← →
Mike Kouzmine © (2004-05-15 00:38) [7]DrPass © (15.05.04 00:29) [4] А как поступать, если мне надо выбрать группу записей из таблицы и в нее же вставить эти же записи, но с другим ключем?
← →
Курдль © (2004-05-15 00:39) [8]Я не применял такие конструкции, но сдается, что одновременно и
VALUES и FOR SELECT употреблять не следует.
← →
DrPass © (2004-05-15 00:46) [9]Я же не говорю, что она обязательно зациклится - это зависит от данных. Можно, например, сначала выбрать, потом вставить:
insert into groups(sclad, num, name) select from groups(:sclad, num, name)...
А если еще подумать, то ошибка, похоже, возникает вообще не в процедуре - а где-нибудь в приложении, которое ее вызывает.
← →
Mike Kouzmine © (2004-05-15 00:47) [10]Курдль © (15.05.04 00:39)
DrPass © (15.05.04 00:29)
Спасибо. Удалил процедуру, написал заново - заработало...
← →
DrPass © (2004-05-15 00:50) [11]Очепятка, имел в виду
insert into groups(sclad, num, name) select :sclad, num, name from groups...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c