【问题标题】:Oracle procedure from a Linux script gives an error [duplicate]Linux 脚本中的 Oracle 过程给出错误 [重复]
【发布时间】:2019-12-13 21:28:37
【问题描述】:

情况:我正在尝试从 Linux shell 脚本运行 Oracle 存储过程。我创建了一个名为 my_procedure.sql 的 .sql 文件,如下所示:

set serveroutput on
set serveroutput off
DECLARE
    my_variable NUMBER(10);
BEGIN
   exec schema.my_procedure();
END;
/
EXIT

上面的 .sql 文件又从一个名为 myscript.sh 的简单 shell 脚本调用,如下所示:

sqlplus -s /@connection_sid @my_procedure

问题:当我执行sh myscript.sh时,它会在my_procedure.sql文件中抛出如下错误:

Encountered the symbol 'schema' when expecting one of the following
:= . ( @ % ;

到目前为止我所做的尝试:我猜想是通过删除 exec 关键字来实现的。然后我尝试使用 username.schema.myprocedure,但没有任何效果。

这个过程在命令行中运行良好,因此:

sqlplus -s username/password <<END
exec myprocedure();
END;

对此的任何建议都会非常有帮助。

【问题讨论】:

  • 删除exec 后,“但没有任何效果”是什么意思? exec 用于 SQLPlus,不能在 PlSQL 块中使用。
  • 删除 exec 会出现错误:“必须声明标识符 'schema.my_procedure'”。应该在哪里声明?我刚刚保存并在架构中运行它。
  • Kaushik,在我的 .sql 文件中,“exec”和删除 exec 都不起作用。只有错误消息不同。使用“exec”,错误消息是“遇到符号模式...”,没有它,错误消息是,“Identifier schema.my_procedure”必须声明。

标签: bash oracle shell sh sqlplus


【解决方案1】:

这一行:

exec schema.my_procedure();

在你的程序中应该只是

schema.my_procedure();

【讨论】:

  • 嗨小脚。我刚刚尝试过,但它给出了错误:“必须声明标识符'schema.my_procedure'”。应该在哪里声明?我刚刚保存并在架构中运行它。
  • 运行该过程的用户是否对该过程具有execute 特权?其所有者应直接将其授予您(即不通过角色)。
  • 小脚,这行得通!我去Oracle SQL Developer,右击Procedure,然后点击Grant,搜索用户并授予所有权限。
  • 好的,很高兴你修好了。
  • 谢谢。不过,错误消息非常具有误导性,并且可能会发送错误消息,而真正的问题是关于执行权限。
猜你喜欢
  • 2016-03-22
  • 2014-08-06
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多