Oracle 名为out参数的存储过程
尝试使用命名参数调用Oracle存储过程。in参数工作正常,但我似乎无法访问out参数 测试存储过程的代码位于页面底部 下面的示例可以很好地使用?占位符Oracle 名为out参数的存储过程,oracle,stored-procedures,groovy,Oracle,Stored Procedures,Groovy,尝试使用命名参数调用Oracle存储过程。in参数工作正常,但我似乎无法访问out参数 测试存储过程的代码位于页面底部 下面的示例可以很好地使用?占位符 /*** Example 1 ***/ /* Works fine using ? placeholders */ def greeting println "**** Example 1 ****\n" sql.call "{call groovy_test(?,?)}", [ 'Johny', Sql.VARCHAR ],
/*** 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;
我是一个groovy的初学者,所以只要把想法扔掉 只是一种预感。。考虑将<代码> SQL.vSARAR> <代码>更改为基本数据类型的字符串。然后,您可以随时将结果键入所需的任何类型。 您也可以试试Sql.LONGVARCHAR 根据Oracle的版本,varchar2可以是4000个字符。可能是Sql.VARCHAR无法处理,但Sql.LONGVARCHAR可以处理 你也试过了吗 执行“{callgroovy_test(:myname,:greeting)}”, ['Johny',Sql.VARCHAR], {问候语->问候语3=问候语} 最后,根据占位符必须是什么?只有 参考:
create procedure groovy_test( myname varchar2, greeting out varchar2 )
as
begin
greeting := 'hello ' || myname;
end;