使用Groovy中的IN OUT参数类型调用Oracle过程

时间:2013-07-26 19:32:16

标签: oracle groovy package procedure

我已经搜索了这个并试了很多东西所以我希望有人可以帮助我。

我有一个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
    }

我不断得到类似的错误:

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)

如果我删除sql.inout并只传入一个变量,它会运行但不正确,因为它不会从Oracle返回密码变量。我已经成功调用了这个包中的大量程序而没有问题,直到IN OUT参数,所以必须有一些简单的我缺少。

1 个答案:

答案 0 :(得分: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
    }

*未经测试直接使用数据库。