语法错误:遇到“BEGIN”

时间:2016-03-16 02:50:56

标签: java jdbc derby

这是我第一次在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.

如何摆脱这个错误?我在德比中创造程序有点困惑。

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存储过程"。