2016-03-16 98 views
0

這是我第一次在德比查詢中創建一個存儲過程。我正在嘗試創建一個過程。當我嘗試運行我的查詢它給我遇到了一個錯誤 「BEGIN」語法錯誤:遇到「BEGIN」

CODE

CREATE PROCEDURE show_name(IN USERNAME VARCHAR(50), IN PASSWORD VARCHAR(50)) 

BEGIN 
    SELECT * FROM LISTNAME 
END 

錯誤

Error code -1, SQL state 42X01: Syntax error: Encountered "BEGIN" at line 3, column 1. 

我怎樣才能擺脫這種錯誤的?在德比中創建程序我有點困惑。

+0

AFAIK,Derby [存儲過程](https://db.apache.org/derby/docs/10.1/ref/rrefcreateprocedurestatement.html)需要用Java編寫。 –

+0

@ElliottFrisch如何創建EXTERNAL NAME?謝謝。我仍然對創建這個存儲過程感到困惑 – Francisunoxx

+0

通過在'class'中寫入Java靜態方法。 –

回答

1

正如對問題的評論所述,Apache Derby存儲過程的實現是Java(public static)方法。請參閱Apache Derby Wiki文章DerbySQLRoutines,特別是第創建步驟,其中包含如何創建存儲過程的簡單示例。

以下摘錄摘自鏈接的Wiki文章。

的SQL創建過程:

CREATE PROCEDURE DRS2(DP1 INTEGER, DP2 INTEGER) 
PARAMETER STYLE JAVA 
LANGUAGE JAVA 
READS SQL DATA 
DYNAMIC RESULT SETS 2 
EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.ProcedureTest.selectRows' 

是程序執行靜態Java方法:

public static void selectRows(int   p1, 
           int   p2, 
           ResultSet[] data1, 
           ResultSet[] data2) 
    throws SQLException 
{ 
    Connection conn = DriverManager.getConnection("jdbc:default:connection"); 
    PreparedStatement ps1 = conn.prepareStatement("select * from t1 where i = ?"); 
    ps1.setInt(1, p1); 
    data1[0] = ps1.executeQuery(); 

    PreparedStatement ps2 = conn.prepareStatement("select * from t1 where i >= ?"); 
    ps2.setInt(1, p2); 
    data2[0] = ps2.executeQuery(); 

    conn.close(); 
} 

注一試,與資源子句將最好所示的明確conn.close()


在鏈路斷開我搜索 「的Apache Derby存儲過程」 事件。

相關問題