Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Ошибка в ХП   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1084644840
Oxer
2004-05-15 22:14
2004.06.06
Возраст сотрудника


1-1085424754
Подкрадуха
2004-05-24 22:52
2004.06.06
Кнопки в StringList


1-1085137905
BFG9k
2004-05-21 15:11
2004.06.06
В ComboBox некорректно работает событие onChange


6-1081625721
Shutov
2004-04-10 23:35
2004.06.06
Компоненты для работы с Bluetooth


1-1085094188
Николай
2004-05-21 03:03
2004.06.06
Совместимость Delphi-программ с WinXp