使用Java运行PL / SQL块

时间:2015-07-08 06:11:19

标签: java oracle plsql spring-jdbc

说我有以下程序 -

DECLARE
   enqueue_options     dbms_aq.enqueue_options_t;
   message_properties  dbms_aq.message_properties_t;
   message_handle      RAW(16);
   message             custom_payload_type;

BEGIN
   message := custom_payload_type('Subject','Body');

   dbms_aq.enqueue(queue_name => 'my_demo_queue',           
         enqueue_options      => enqueue_options,       
         message_properties   => message_properties,     
         payload              => message,               
         msgid                => message_handle);

   COMMIT;
END;

使用spring jdbc我已经创建了一个数据源> 我没有将此过程存储在数据库中。这些程序在java方面硬编码。

如何使用java运行此SQL块?

2 个答案:

答案 0 :(得分:3)

使用CallableStatement

String plsql = "..... your code in here ...";
Connection conn = dataSource.getConnection();
CallableStatement cstmt = conn.prepareCall(plsql);
cstmt.execute();

答案 1 :(得分:0)

如果您只将Java代码中的存储过程作为String,则需要使用 Connection.createStatement()创建存储过程,然后使用 prepareCall(例如 prepareCall)执行它。 “{call your_procedure_name()}”)执行

有关更详细的步骤,请参阅Creating Stored Procedures in Java DB with SQL Scripts or JDBC API。或等同于Oracle的this page

下面是粗略的代码步骤。为简洁起见,我省略了try catch块,为call语句设置输入参数,注册输出参数等。就像我说的那样,可以通过从上面发布的文档链接中提取相关段落来获得完整的答案。

Connection conn = dataSource.getConnection();
String createProcedure = "create procedure enque_message(" + ... ;
Statement stmt = conn.createStatement();
stmt.executeUpdate(createProcedure);

CallableStatement cStmt = conn.prepareCall("{call enque_message()}");
boolean hadResults = cStmt.execute();
while (hadResults) {
    ResultSet rs = cStmt.getResultSet();
    // process result set
}