Oracle 名为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 ],

尝试使用命名参数调用Oracle存储过程。in参数工作正常,但我似乎无法访问out参数

测试存储过程的代码位于页面底部

下面的示例可以很好地使用?占位符

/*** 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;