2013-12-13 116 views
4

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

回答

0

我与常规所以只是抛出想法初学者FWIW ...

只是一种预感..考虑改变Sql.VARCHAR的基本数据类型(如String)。然后,您总是可以将结果转换为您想要的任何类型。 你也可以试试Sql.LONGVARCHAR

根据版本的不同,varchar2可以是4000个字符。可能是Sql.VARCHAR不处理,但Sql.LONGVARCHAR可能会处理它。

而且你尝试 sql.execute “{调用groovy_test(:MYNAME,:问候)}”, [ '约翰尼拉',Sql.VARCHAR], {问候 - > greeting3 =问候}

最后,根据this的占位符必须是?只有

参考: Call SQL stored procedure with named parameter in Groovy

相关问题