2013-07-26 90 views
0

我已经搜索了这个并尝试了很多事情,所以我希望有人能帮助我。使用Groovy中的IN OUT参数类型调用Oracle过程

我有一个包含以下参数的过程的Oracle包:

PROCEDURE g$_verify_password1_prd 
     (p_object IN  VARCHAR2, 
     p_version IN  VARCHAR2, 
     p_password IN OUT VARCHAR2, 
     p_role  OUT VARCHAR2) 

这是一个API调用,并通过我们的供应商写的,我不能修改它,不希望。我的问题是与p_password IN OUT参数。 Groovy调用这个语法的语法是什么?我在搜索这个答案时发现了Sql.inout,但无法得到它。这里是我的代码,请记住我已经尝试了很多事情,这简直就是在我离开的:

sql.call '{call G$_SECURITY.G$_VERIFY_PASSWORD1_PRD(?, ?, ?, ?)}', 
    [$p_object, p_version, ${Sql.inout(Sql.VARCHAR(p_password))}, Sql.VARCHAR], 
    { p_password, p_rol -> 
     //p_password = p_pass 
     p_role = p_rol 
     println p_password 
     println p_rol 
    } 

我不断收到类似的错误:如果我删除sql.inout

Caught: groovy.lang.MissingPropertyException: No such property: _SECURITY for class: banner.CheckSecurityService 
    at banner.CheckSecurityService.SecurityCheck(CheckSecurityService.groovy:49) 
    at banner.Hello2Service.main(Hello2Service.groovy:20) 

只是传入一个变量,它运行但不正确,因为它不是从Oracle返回密码变量。我已经成功地从这个包中调用了大量程序,直到IN OUT参数为止,所以必须有一些简单的东西丢失。

+0

看看这个错误,问题出在'G $ _SECURITY'上,具体来说就是'$ _SECURITY'。当用'$'前置时'_SECURITY'被视为变量。你在应用程序中使用了双引号“''',但是我发现你已经使用过''' – dmahapatro

+0

这就是为什么我说我已经”成功地调用了这个程序包中的很多程序而没有问题“:)我碰到如果我摆脱了sql.inout,只是传入一个变量并继续使用与$相同的包名称,错误消失,但行为不是预期的那样 – tnichol

回答

2

的sql可以是这样的:

sql.call '{call G$_SECURITY.G$_VERIFY_PASSWORD1_PRD(?, ?, ?, ?)}', 
    [$p_object, p_version, Sql.inout(Sql.VARCHAR(p_password)), Sql.VARCHAR], 
    { p_password, p_rol -> 
     //p_password = p_pass 
     p_role = p_rol 
     println p_password 
     println p_rol 
    } 

*未经检验直接与数据库。

+0

啊,我没有注意到你是同一个人,如上所述,这样做,非常感谢你dmahapatro!我想我尝试了很多选项,我很困惑一段时间后,我将它标记为正确的答案。帮助很大。 – tnichol

相关问题