【问题标题】:How to execute a oracle procedure from shell如何从 shell 执行 oracle 过程
【发布时间】:2013-09-02 20:11:39
【问题描述】:

我在 oracle 中有一个存储过程,我想从 cygwin 调用该过程。这是程序

CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
 dbms_output.put_line('Hello World!');
 END;

我正在这样做

sqlplus -s system@orcl/oracle10g<<END
execute greetings();
commit;
exit;
END

【问题讨论】:

  • 当我进行 sh 测试时(这是我编写此代码的 vi 编辑器文件的名称)它显示 PLS-00201:必须声明标识符 'GREETINGS'

标签: oracle cygwin


【解决方案1】:

使用 SqlPlus 连接 Oracle,然后运行如下过程:

execute package_name.procedure_name (parameters...)

如果你想在 Windows shell 中调用 sqlplus:

@echo execute some_procedure | sqlplus username/password@databasename

(见question

在 Unix 上,试试这个:

echo "execute <some_procedure>" | sqlplus -s username/password@host:1521/service 

【讨论】:

  • 感谢机会,但如果您执行 sqlplus,我必须从 shell 调用存储过程,然后 shell 环境将更改为 oracle,并且该过程将运行正常。但我必须保留 shell 环境,并且有调用过程
  • 断开frm oracle数据库
  • $ echo "procPrintHelloWorld" | sqlplus -s system/oracle10g@orcl:1521/orcl
  • 这是我正在做的,我的过程是 CREATE OR REPLACE PROCEDURE procPrintHelloWorld IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!');结尾; /
  • 您必须先创建该过程,然后尝试从您的 shell 中调用它。
【解决方案2】:

尝试添加

set serveroutput on 

在执行 greetings() 之前;

【讨论】:

  • 第 1 行出现错误:ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“GREETINGS” ORA-06550:第 1 行,第 7 列:
  • 问候语是在什么模式中定义的?要么作为问候的所有者(而不是作为系统)连接,要么在过程名称之前设置 shema 名称:execute SCOTT.greetings();
【解决方案3】:

sqlplus -s system/oracle10g@orcl @proc.sql 这在系统是我的 oracle 用户名 oracle10g 是我的通行证并且 orcl 是本地主机并且 proc.sql 是存储过程的文件名的情况下工作正常。所有我们要做的就是从shell转到特定目录然后执行这个脚本

【讨论】:

  • 我刚刚找到它,所以我发布了谢谢大家的帮助
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 2014-06-27
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2021-04-30
相关资源
最近更新 更多