【问题标题】:Call stored procedure with Shell Script使用 Shell 脚本调用存储过程
【发布时间】:2012-04-02 04:26:04
【问题描述】:

你能帮帮我吗? 如何使用 sqlplus 从 shell 脚本连接到数据库 Oracle? 你能做一个调用存储过程的shell脚本的例子吗??

谢谢。

【问题讨论】:

    标签: oracle stored-procedures sqlplus


    【解决方案1】:

    创建一个 xxxx.sql 文件并像这样执行它:

    set serveroutput on;
    execute STORED_PROCEDURE;
    set serveroutput off;
    exit
    

    您需要一种方法来执行您的脚本,我在基于 *nix 的系统上使用 CRON。我的脚本看起来像这样

    #!/bin/sh
    # This short shell script calls the XXXX Stored Procedure
    # drive.
    PATH=$PATH:/opt/oracle/local/bin:/usr/local/bin
    export ORACLE_SID=XXXX;   
    export ORAENV_ASK=NO;      
    export TWO_TASK=XXXXXXXXX;    
    . /usr/local/bin/oraenv
    sqlplus USERID/PASSWPRD @SQL_Script_to_call_stored_Proceudre.sql
    exit 
    

    【讨论】:

    • 您错过了@。 Persaonlly 我也总是使用-s 标志来减少噪音;特别是如果从cron 运行(尽管这似乎不是这里的要求)显式设置环境:ORACLE_HOMEORACLE_SID 等。
    • @Alex Poole - 你是 100% 正确的。在发布之前,我对所有这些内容的示例进行了清理。出于偏执,有一天我会在意外中发布密码或关键数据库名称。我现在清理它
    • 这不是妄想症,他们真的是来抓你的……*8-)
    • SQL_Script_to_call_stored_Proceudre.sql 这个和xxxx.sql一样吗??
    • @Nick - 是的,它是一样的
    【解决方案2】:

    这是一个例子:

    创建一个 sh 文件“callProcedureFromBash.sh”

    #!/bin/bash      this is a comment
    
    #if you can access sqlplus already, you don't need following 2 lines
    export ORACLE_HOME = /efs/dist/oracledb/client/10G/exec
    export PATH=$PATH:$ORACLE_HOME/bin
    
    sqlplus "userid/password@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = WWW.YOURHOST.COM) (PORT = 12345) (CONNECT_DATA = (SID = HXZ524))))" <<END
    
    DECLARE
        a int;
    BEGIN
        packagename.Procedurename(a);
    END;
    /
    commit;
    

    【讨论】:

    • 您好,我们可以从shell脚本文件中调用非存储过程吗?(意味着直接编写plsql代码)而不是调用文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2013-06-03
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多