尝试使用命名参数调用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;