为啥 PDI 找不到/运行我的包存储过程?

Posted

技术标签:

【中文标题】为啥 PDI 找不到/运行我的包存储过程?【英文标题】:Why Can't PDI find/run my package stored procedure?为什么 PDI 找不到/运行我的包存储过程? 【发布时间】:2021-06-24 20:08:10 【问题描述】:

社区!这是我的第一个问题,请放轻松! :)

我在 PDI 上有一个 ETL 流程,用于编排对存储在 Oracle 包中的过程的调用。

在 PL/SQL Developer 上,一些程序已经准备好并可以正常运行。 当我使用 pentaho 调用它们时,无论是使用作业“SQL”还是使用转换“执行 SQL 脚本”或“调用 DB 过程”,我总是会收到与“找不到过程”相关的错误,例如:“ORA-00904 :“PKG_CARGA_DIARIA_SABARA”。“FUN_HELLO_WORLD”:无效标识符”或“ORA-06550:第 1 行,第 13 列: PLS-00201:必须声明标识符“PKG_CARGA_DIARIA_SABARA.FUN_HELLO_WORLD”。

请问,我做错了什么?

enter image description here

enter image description here

enter image description here

编辑 1:我使用创建包的用户在 PL/SQL Developer 中对其进行测试并在 PDI 中连接到数据库。

【问题讨论】:

【参考方案1】:

如果我运行您的代码,我会得到 - 毫不奇怪 - 相同的消息:

SQL> select "PKG_CARGA_DIARIA_SABARA"."FUN_HELLO_WORLD" from dual;
select "PKG_CARGA_DIARIA_SABARA"."FUN_HELLO_WORLD" from dual
       *
ERROR at line 1:
ORA-00904: "PKG_CARGA_DIARIA_SABARA"."FUN_HELLO_WORLD": invalid identifier


SQL>

这意味着我无法访问该包中的功能(即包本身)。当然不是,我的架构中没有它。看来你也没有。

说它在 PL/SQL Developer 中工作,我想你是作为包的所有者连接的。如果用户 - 试图调用该函数 - 连接到 PDI 中的数据库(不管它是什么,我不知道/使用它)与您在 PL/SQL Developer 中使用的不同,它不是授予包的 EXECUTE 权限,则它不能“看到”也不能执行它。

因此:

尝试以包的所有者身份连接 如果您必须以其他人的身份连接,请让所有者授予 EXECUTE 权限,而您应该(在 PDI 中)在包名称前加上所有者名称

【讨论】:

嗨小脚!非常感谢您的回答,但是我确定使用的是同一个用户,顺便说一下,应该已经发布了这个信息和问题。我不熟悉 oracle 如何分离对象,那里可能有错误。我在没有定义模式的情况下创建了这个包和过程,并且使用了我在 PL/SQL Developer 和 Pentaho Connection 中使用的相同进程用户。我虽然可以在 PL/SQL 中访问它,所以没有理由不在 PDI 中访问它,这有意义吗? 在Oracle中创建对象时不必指定所有者(schema);默认情况下,属于您当前连接的用户(模式)。对于 PDI,我 - 不幸的是 - 帮不上忙,因为我不使用它。 我明白了。我正在通过 PDI 测试一些对象的创建和销毁,它似乎工作正常,只是无法真正使用包内的过程,至少现在是这样。感谢所有的帮助,小脚! :)【参考方案2】:

在这里找到它!将发布以便任何人都可以使用答案。

PDI 不会自动考虑来自数据库连接用户的架构,您必须专门将其添加到 SQL 作业内的代码中。

所以:“BEGIN .

并且:“BEGIN ..

希望对某人有所帮助,谢谢!

【讨论】:

以上是关于为啥 PDI 找不到/运行我的包存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

R SQL查询:找不到存储过程

sqlserver profiler为啥跟踪不到自定义的存储过程执行情况

Pentaho 数据集成 (PDI) 8.3 CE 显示错误“localhost:9051”页面在除浏览存储库之外的所有对话框中都找不到

为啥我们需要使用存储过程? [关闭]

JTDS (Java/MSSQL) - 找不到存储过程

SimpleJdbcCall 找不到存储过程