gpt4 book ai didi

oracle - 存储过程命名参数

转载 作者:行者123 更新时间:2023-12-02 06:58:08 24 4
gpt4 key购买 nike

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

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

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

有人知道如何在使用命名符号时访问输出参数吗?确实会运行更复杂的程序,并且它们确实会获取输入值。这一点在表数据中得到了验证。

存储过程代码:

create procedure groovy_test( myname varchar2, greeting out varchar2 )
as
begin

greeting := 'hello ' || myname;

end;

最佳答案

我是一个 groovy 的初学者,所以只是抛出一些想法 FWIW...

只是一种预感..考虑将 Sql.VARCHAR 更改为 String 等基本数据类型。然后您可以随时将结果类型转换为您想要的任何类型。您也可以尝试 Sql.LONGVARCHAR

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

你也尝试过吗 sql.execute "{call groovy_test(:myname,:greeting)}", ['约翰尼',Sql.VARCHAR], { 问候语 -> 问候语 3 = 问候语 }

最后根据this占位符必须是?仅

引用: Call SQL stored procedure with named parameter in Groovy

关于oracle - 存储过程命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com