2011-02-23 26 views
0

我不能運行下面的SP錯誤-104火鳥創建存儲過程

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. 

回答

4

你以前使用的一組項和這個代碼後?

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複製到所得到的錯誤告訴你的位置,以便你可以看到實際發生的情況。

編輯:

如果你願意,你可以檢查此link。您可以在這裏找到許多關於Firebird + IBExpress的信息,包括SET TERM(第81頁)。

編輯2:

在家IBExperts +火鳥剛剛試過,我沒有問題,創建存儲過程。我的猜測是您正在嘗試執行以下操作之一:

  • 您已打開SQL編輯器並正在嘗試直接編譯代碼。這是行不通的,因爲IBExperts認爲您正在嘗試運行DSQL語句。存儲過程使用PSQL語句創建。

  • 您正在嘗試使用「新過程」實用程序(主菜單右上方的複選按鈕),並將整個代碼粘貼到編輯器中。這是行不通的,因爲在那個編輯器中你只需要輸入主體代碼。存儲過程名稱在您打開的窗口右上角的字段中設置。通過使用代碼編輯器上方左側的「插入參數/變量」按鈕來引入參數和變量。 SET TERM句子由IBExperts自動創建。您可以在DDL選項卡中檢查生成的代碼。

HTH

+0

有了,我得到以下錯誤:無效令牌。 動態SQL錯誤。 SQL錯誤代碼= -104。 令牌未知 - 第3行第1列。 SET。 – Herter

+0

您使用哪種工具創建SP?它是isql還是另一個?就我所知,SET TERM特定於Firebird,因此無論使用哪種組件或工具創建SP,都需要能夠識別它。 –

+0

我完全按照原樣複製了代碼..我使用IBExpert創建過程..也許它是IBExpert,它不理解它? – Herter