嘗試使用命名參數調用Oracle存儲過程。 in參數工作正常,但我似乎無法訪問輸出參數。存儲過程名爲out參數
測試存儲過程的代碼位於頁面的底部。
/* imports and sql connection */
import groovy.util.GroovyTestCase
import groovy.sql.Sql
import lib.*
import java.sql.*
import oracle.jdbc.*
def sql;
this.class.classLoader.rootLoader.addURL(new URL("file:ojdbc7.jar"))
sql= Sql.newInstance ("jdbc:oracle:thin:@......", "..user..", "..password..")
以下示例正常使用?佔位符
/*** Example 1 ***/
/* Works fine using ? placeholders */
def greeting
println "**** Example 1 ****\n"
sql.call "{call groovy_test(?,?)}",
[ 'Johny', Sql.VARCHAR ],
{ dbgreeting -> greeting = dbgreeting }
println "greeting: " + greeting
/* Outputs: greeting: hello Johny /*
下一個實例失敗,無效的列類型
/*** Example 2 ***/
def greeting2
println "\n**** Example 2 ****\n"
sql.call "{call groovy_test(:myname,:greeting)}",
[ myname:'Johny', greeting:Sql.VARCHAR ],
{ dbgreeting -> greeting2 = dbgreeting }
println "greeting: " + greeting
/* Error
groovy.sql.Sql call
WARNING: Failed to execute: {call groovy_test(:myname,:greeting)} because: Invalid column type
Caught: java.sql.SQLException: Invalid column type
*/
有沒有從下面的例子輸出
/*** Exampl 3 ***/
def greeting3
println "\n**** Example 3 ****\n"
sql.execute "{call groovy_test(:myname,:greeting)}",
[ myname:'Johny', greeting:Sql.VARCHAR ],
{ dbgreeting -> greeting3 = dbgreeting }
println "Test3 greeting: " + greeting3
/* Output: greeting: null */
有沒有人對如何訪問out參數的任何想法當使用命名符號? 運行更復雜的程序,它們確實得到輸入值。這已在表格數據中得到驗證。
存儲的過程代碼:
create procedure groovy_test(myname varchar2, greeting out varchar2)
as
begin
greeting := 'hello ' || myname;
end;