Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создаю процедуру, FB говорит - parameter mismatch. [D6, IB6.x, Firebird]


Dimedrol ©   (2004-03-24 12:39:00) 

Коллеги - сабж.
Вот моя несложная процедура :

CREATE PROCEDURE INS_GOO (
   INNID INTEGER,
   DATATYPE INTEGER,
   ONEWORD VARCHAR (64))
RETURNS (
   ID INTEGER)
AS
DECLARE VARIABLE GEN INTEGER;
DECLARE VARIABLE MYID INTEGER;
DECLARE VARIABLE INN INTEGER;

BEGIN

select first 1 id from MY_GOOGLE where ONEWORD=:ONEWORD into :MYID;

IF (:MYID IS NULL) THEN
BEGIN
insert into my_google (ONEWORD, DATATYPE) values (:ONEWORD, :DATATYPE);
GEN=GEN_ID(GOO1, 0);
insert into MY_GOOIDS (INNID, WRDID) values (:INNID, :GEN);
ID=GEN;
SUSPEND;
END
else
BEGIN
insert into MY_GOOIDS (INNID, WRDID) values (:INNID, :MYID);
ID=MYID;
SUSPEND;
END
END


Выполняю код.
Процедура создается(!), но параллельно мне выдается ошибка
- parameter mismatch for procedure INS_GOO

В качестве клиента использую EMS IB/FB Manager.


Соловьев   (2004-03-24 16:10:00) [1]

Давно пора перейти на новую версию IBExpert - http://www.ibexpert.com/rus/ibe_sfx.exe


Dimedrol   (2004-03-24 16:08:00) [2]

2 Johnmen ©
не исключено... ;-)

2Term ©
НЕТ.
ВЫЗЫВАЕТСЯ процедура нормально. Работает ОК.
Эта картина при СОЗДАНИИ!

Просто, я заподозрил неладное и забил тревогу..


Term   (2004-03-24 15:12:00) [3]

а ошибка уже при вызове процедуры?


Johnmen   (2004-03-24 15:09:00) [4]

Я давно подозревал, что EMS IB/FB Manager имеет неожиданные багофичи...
:)


Dimedrol   (2004-03-24 14:59:00) [5]

2 Соловьев ©
ONEWORD VARCHAR(255) CHARACTER SET NONE

та же картина

2 Johnmen ©
Что значит "совпадают" ?
Эта процедура другими не используется
и самам другие не вызывает...

даже вот так делаю...


CREATE PROCEDURE INS_GOO
(
INNID INTEGER,
DATATYPE INTEGER,
ONEWORD VARCHAR (255)
)
RETURNS
(
ID INTEGER
)
AS

BEGIN
ID=0;
SUSPEND;
END


Даже ТОГДА(!) говорит... 888-\


Dimedrol   (2004-03-24 14:59:00) [6]

даже и так -

CREATE PROCEDURE INS_GOO (
   INNID INTEGER)
RETURNS (
   ID INTEGER)
AS

BEGIN
ID=0;
SUSPEND;
END


888888-\


Соловьев   (2004-03-24 13:34:00) [7]

вернее CHARACTER SET


Соловьев   (2004-03-24 13:33:00) [8]

ONEWORD VARCHAR (64) - желательно COLLATE указать


Johnmen   (2004-03-24 13:32:00) [9]

>Dimedrol ©

Везде ли совпадают типы ? integer и varchar(64) ?


Dimedrol   (2004-03-24 13:26:00) [10]

Нет.
Ошибка при СОЗДАНИИ прцедуры.
Работает они потом ВРОДЕБЫ(!) нормально...
Но такого ведь быть не должно!

двоеточие убрал.
тоже самое... :-(


Соловьев   (2004-03-24 13:21:00) [11]

IF (:MYID IS NULL) THEN
двое точие не надо


Соловьев   (2004-03-24 13:17:00) [12]

Ошибка выдается при выполнении ХП?


Dimedrol   (2004-03-24 13:09:00) [13]

Вообще-то у мня там стоит " FIRST 1"

ну да ладно...
Сделал FOR select
то же самое :-(

CREATE PROCEDURE INS_GOO (
   INNID INTEGER,
   DATATYPE INTEGER,
   ONEWORD VARCHAR (64))
RETURNS (
   ID INTEGER)
AS
DECLARE VARIABLE GEN INTEGER;
DECLARE VARIABLE MYID INTEGER;
DECLARE VARIABLE INN INTEGER;

BEGIN

FOR selectfirst 1 id from MY_GOOGLE where ONEWORD=:ONEWORD into :MYID
DO
BEGIN
IF (:MYID IS NULL) THEN
BEGIN
insert into my_google (ONEWORD, DATATYPE) values (:ONEWORD, :DATATYPE);
GEN=GEN_ID(GOO1, 0);
insert into MY_GOOIDS (INNID, WRDID) values (:INNID, :GEN);
ID=GEN;
SUSPEND;
END
else
BEGIN
insert into MY_GOOIDS (INNID, WRDID) values (:INNID, :MYID);
ID=MYID;
SUSPEND;
END
END
END


Term   (2004-03-24 12:54:00) [14]


> select first 1 id from MY_GOOGLE where ONEWORD=:ONEWORD
> into :MYID;

может должно быть
for select


Наверх

Титульная страница Поиск, карта сайта Написать письмо