为啥 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 找不到/运行我的包存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver profiler为啥跟踪不到自定义的存储过程执行情况
Pentaho 数据集成 (PDI) 8.3 CE 显示错误“localhost:9051”页面在除浏览存储库之外的所有对话框中都找不到