2017-08-09 21 views
-1

我對此很陌生。請不要低估問題。如何在SQL中使用以下條件創建DB2存儲過程?

我已經創建了一個名爲'FormData'的表格,它包含以下字段 審閱者,代理名稱,姓名,電子郵件,電話和所有類型的varchar。 我必須從FORMDATA中檢索所有行,其中Reviewer等於用戶給出的Reviewer的值。

我寫下面的代碼,但我沒有得到什麼問題。

CREATE PROCEDURE GetFormData(INOUT Reviewer varchar, 
           INOUT AgencyName varchar, 
           INOUT Name varchar, 
           INOUT Email varchar, 
           INOUT Phone varchar) 
LANGUAGE SQL 
P1:BEGIN 
DECLARE v_Reviewer varchar; 
SET v_Reviewer=Reviewer; 
SELECT * FROM TRAININGDB.FormData 
WHERE Reviewer=v_Reviewer; 
END P1 

我收到後,這是錯誤:

DB21034E該命令被處理爲一個SQL語句,因爲它不是一個 有效的命令行處理器命令。在SQL處理期間,它返回: SQL0104N意外的標記「END-OF-STATEMENT」之後發現「審閱 VARCHAR」

我們正在使用DB2在WebSphere服務器,其餘細節。 產品標識:SQL09075 DB2 v9.7.500.702 JDK 1.6 操作系統:Windows 7

+0

看看這有助於:https://stackoverflow.com/questions/24758349/db2-function-error/24767500#24767500 – mustaccio

回答

1

有幾個問題與您的代碼,並且還您使用的是從你的問題(工具(S)省略了關鍵細節/版本/操作系統詳細信息)。

發生SQL0104N是因爲您沒有配置用於提交語句的工具來指定備用語句分隔符。在過程中,語句內分隔符是分號,但您需要額外的分隔符來標記過程的結束(並配置提交語句的工具以指定其他分隔符)。

正如您所瞭解的,最好的建議是研究IBM示例SQL PL存儲過程,並使其適用於您的環境。這些都可以在您的DB2版本的在線知識中心看到,並且它們也安裝在任何DB2 Linux/Windows/Unix服務器上。

如果您從Unix或Windows上的shell命令行(db2cmd.exe或bash shell)提交它,那麼下面是您的過程示例。查找所有與您的版本不同的語法,並根據需要進行調整。

--#SET TERMINATOR @ 
CREATE or replace PROCEDURE GetFormData(IN p_Reviewer varchar(20)) 
result sets 1 
specific GetFormData 
LANGUAGE SQL 
P1: 
BEGIN 
    declare c1 cursor for SELECT * FROM TRAININGDB.FormData WHERE Reviewer=p_Reviewer; 
    open c1; 
END P1 
@ 
+0

我已編輯的細節在我的問題的結束,而是你所提供的代碼工作得很好。謝謝您的幫助。請不要低估這個問題。 – Jay

相關問題