2013-12-13 115 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

相關問題