说我有以下程序 -
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块?
答案 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
}