Ошибка -104 при создании хранимой процедуры Firebird - PullRequest
0 голосов
/ 24 февраля 2011

Я не могу запустить следующий SP

CREATE PROCEDURE SP_NYANSAT(
        FORNAVN VARCHAR(30),
        EFTERNAVN VARCHAR(30),
        ADRESSE VARCHAR(50),
        POSTNUMMER CHAR(4),
        TELEFONNUMMER CHAR(8),
        EMAIL VARCHAR(50))
    AS
    DECLARE VARIABLE ID INTEGER;
    BEGIN
      ID = GEN_ID(GEN_ANSAT_ID,1);
      INSERT INTO MYTABLE (ID, FORNAVN, EFTERNAVN, ADRESSE, POSTNUMMER, TELEFONNUMMER, EMAIL) VALUES (:ID, :FORNAVN, :EFTERNAVN, :ADRESSE, :POSTNUMMER, :TELEFONNUMMER, :EMAIL);
    END

Я получаю следующую ошибку:

can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
CREATE.

1 Ответ

4 голосов
/ 24 февраля 2011

Использовали ли вы Set Term до и после этого кода?

Все команды в Firebird должны заканчиваться точкой с запятой.Если вы хотите создать хранимую процедуру, вы должны иметь возможность различать завершающую точку с запятой и точку с запятой внутри хранимой процедуры.

Примерно так:

SET TERM ^ ;

CREATE PROCEDURE SP_NYANSAT(
        FORNAVN VARCHAR(30),
        EFTERNAVN VARCHAR(30),
        ADRESSE VARCHAR(50),
        POSTNUMMER CHAR(4),
        TELEFONNUMMER CHAR(8),
        EMAIL VARCHAR(50))
    AS
    DECLARE VARIABLE ID INTEGER;
    BEGIN
      ID = GEN_ID(GEN_ANSAT_ID,1);
      INSERT INTO MYTABLE (ID, FORNAVN, EFTERNAVN, ADRESSE, POSTNUMMER, TELEFONNUMMER, EMAIL) VALUES (:ID, :FORNAVN, :EFTERNAVN, :ADRESSE, :POSTNUMMER, :TELEFONNUMMER, :EMAIL);
    END
    ^

SET TERM ; ^ 

Пожалуйста, обратите внимание, как объявление хранимой процедуры завершается с помощью ^, тем самым заканчивая оператор.После объявления вы также восстанавливаете завершающую точку с запятой.

В примечании, я бы порекомендовал скопировать firebird.msg в папку, в которой указана полученная вами ошибка, чтобы вы могли видеть, что на самом деле происходит.

РЕДАКТИРОВАТЬ:

Если вы хотите, вы можете проверить эту ссылку .Там вы можете найти много информации о Firebird + IBExpress, включая SET TERM (стр. 81).

EDIT 2:

Только что попробовал дома с IBExperts + Firebirdи у меня не было проблем с созданием хранимой процедуры.Я предполагаю, что вы пытаетесь сделать одно из следующих действий:

  • Вы открыли редактор SQL и пытаетесь скомпилировать код напрямую.Это не сработает, потому что IBExperts считает, что вы пытаетесь выполнить предложения DSQL.Хранимые процедуры создаются с предложениями PSQL.

  • Вы пытаетесь использовать утилиту «Новая процедура» (кнопки проверки в правой верхней части главного меню) и вставляете весь код вредактор.Это не сработает, потому что в этом редакторе вам нужно только поместить код тела.Имя хранимой процедуры задается в поле в верхней правой части окна, которое вы открыли.Параметры и переменные вводятся с помощью кнопки «Вставить параметр / переменную» в левой части над редактором кода.Предложения SET TERM автоматически создаются IBExperts.Вы можете проверить полученный код на вкладке DDL.

HTH

...