【问题标题】:Unable to get DatabaseMetaData for Procedure from JDBC无法从 JDBC 获取过程的 DatabaseMetaData
【发布时间】:2017-01-08 05:07:26
【问题描述】:

我有两个问题: 我无法通过 JDBC 获取过程元数据 1.)如果我的程序在一个包内 2.) 如果过程在包之外,但用户是非模式所有者,但可以访问过程

对于 (1) 我提到了 this 链接,但即使使用 Schema owner 作为程序用户也对我不起作用

这是我的代码 sn-p 的样子:

 DatabaseMetaData metadata = conn.getMetaData();

        ResultSet rs = metadata.getProcedureColumns(
                    "PKG_TEST",
                    "ENTITLE",
                    "getUser",
                "%"); // Tried with null instead of % as well

其中 getUser 是 Schema ENTITLE 中 PKG_TEST 中的过程

唯一对我有用的是:

 ResultSet rs = metadata.getProcedureColumns(
                conn.getCatalog(),
                null,
                "getUser1",
           null); 

其中 getUser1 是任何包之外但在模式 ENTITLE 中的过程,并且程序以 ENTITLE 身份登录数据库

访问架构的数据库元数据是否需要任何权限?

请注意,在上面的示例中,如果我以有权访问该过程但不是架构所有者的 DB 用户身份登录,它将不起作用。

【问题讨论】:

  • Note that in the example above that works if I login as a DB user that has access to the procedure , it doesn't work. 我不知道你在说什么。登录到数据库时是否有效?
  • Oracle 以大写形式存储名称,所以"getUser" 很可能应该是"GETUSER"
  • Susannah Potts ,更正了最后一行。如果我不以架构用户身份登录,基本上它不起作用。
  • a_horse_with_no_name ,当我创建程序时,我添加了引号。另一个在创建时已经大写的程序也无法正常工作。

标签: java oracle stored-procedures jdbc


【解决方案1】:

Oracle 以大写形式存储名称

String p = "getUser1";

ResultSet rs = metadata.getProcedureColumns(
               conn.getCatalog(),
               null,
               p.toUpperCase(),
               null); 

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 2019-07-18
    • 2014-03-01
    • 2019-05-01
    • 2017-09-03
    • 2015-06-02
    • 2017-11-09
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多