这是我第一次在derby查询中创建存储过程。我正在尝试创建一个程序。当我尝试运行我的查询时,它给了我一个错误遇到“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 :(得分:1)
正如对该问题的评论中所提到的,Apache Derby存储过程的实现是Java(public static
)方法。请参阅Apache Derby Wiki文章DerbySQLRoutines,特别是 Creating Procedures 部分,其中包含有关如何创建存储过程的简单示例。
以下摘录摘自链接的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();
}
请注意,try-with-resources子句优于显示的显式conn.close()
。
如果链接中断,我搜索了" Apache Derby存储过程"。