【问题标题】:NHibernate calling Oracle stored procedure with schema prefix, how?NHibernate 使用模式前缀调用 Oracle 存储过程,如何?
【发布时间】:2011-03-21 05:22:39
【问题描述】:

我目前正在使用 NHibernate 在 Oracle 中调用存储过程。但是,如何在标签的 {call} 语法中指定架构前缀?

我试过了

<sql-query name="my_sproc">
<return class="my_sproc_class" />
    {call schema2.my_sproc (:p1)}
</sql-query>

但 NHibernate 运行时返回时未定义“schema2”,而“schema2”是我的 Oracle 数据库上明确定义的架构。

谢谢。

【问题讨论】:

    标签: oracle nhibernate stored-procedures schema


    【解决方案1】:

    我在这里可能弄错了,但我认为 NHibernate 要求所有 UDF/SPROCS 都以“dbo”为前缀; {call dbo.schema2.my_sproc (:p1)} 有效吗?

    【讨论】:

      【解决方案2】:

      可能是特权吗?该过程可能存在于该架构中,但您可能没有执行它的权限,或者您可能通过未启用的角色拥有权限。

      可能是参数。如果该过程需要两个参数(或者是一个函数),那么尝试使用一个参数调用它可能会得到一个“不存在”错误,而实际上它的意思是“没有一个我可以只用一个参数调用”。

      最后一个选项是,如果您的架构中有一个与其他架构同名的包。像“UTILS”这样的通用东西可能会发生。如果您要求 Oracle 执行 UTILS.PROC 并且您有一个 UTILS 包,那么它会在包中查找并在找不到它时抛出错误,即使存在带有过程 PROC 的 UTILS 模式。


      编辑添加

      在这种情况下,我倾向于参数问题 示例here 似乎使用?作为参数占位符。

      【讨论】:

      • 我可以在 sqldeveloper 中执行“exec schem1.my_sproc(:p1)”而不会出现任何错误,因此这不应该是特权(通过使用相同的登录名)。并且不涉及任何软件包。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2010-10-12
      相关资源
      最近更新 更多