【问题标题】:How to pass parameter of oracle sql script file to sqlplus from shell prompt?如何从shell提示符将oracle sql脚本文件的参数传递给sqlplus?
【发布时间】:2020-06-02 00:43:30
【问题描述】:

目的:在shell提示符下以sql脚本文件路径为参数调用sqlplus

场景:

以 root 身份登录并希望以 oracle 身份执行 sql 脚本文件

命令:

sudo -u oracle bash -c ". ~/.bash_profile; sqlplus / as sysdba@/tmp/downloads/oracle/instl/script/createschema.sql

预期:createschema.sql 中的 sql 命令将被执行

实际:只得到sql提示

也试过了:

一)

sudo -u oracle bash -c ". ~/.bash_profile; sqlplus@/tmp/downloads/oracle/instl/script/createschema.sql / as sysdba

b)

sudo -u oracle bash -c ". ~/.bash_profile; sqlplus -s /as sysdba << EOF 

每当 sqlerror 退出 sql.sqlcode;关闭回声;出发; /tmp/downloads/oracle/instl/script/createschema.sql;出口; EOF"

但在 a) 和 b) 中都出现错误。

请指导我使用 sql 脚本文件路径作为 shell 提示符的参数调用 sqlplus。

【问题讨论】:

    标签: sql linux bash oracle


    【解决方案1】:

    示例 1

    #!/bin/sh
    
    username=\"Scott\"
    password=\"@T!ger\"
    host=10.x.xx.xxx
    port=1521
    service=esmd
    ezconnect=$host:$port/$service
    
    echo username:  $username
    echo password:  $password
    echo host:      $host
    echo port:      $port
    echo service:   $servive
    echo ezconnect  $ezconnect
    
    echo -e 'show user \n  select 1 from dual; \n select sysdate from dual; \nexit;' |  sqlplus -s  $username/$password@$ezconnect
    

    输出:

    oracle@esmd:~> ./test_echo.sh
    username: "Scott"
    password: "@T!ger"
    host: 10.x.xx.xxx
    port: 1521
    service:
    ezconnect 10.x.xx.xxx:1521/esmd
    USER is "Scott"
    
             1
    ----------
             1
    
    
    SYSDATE
    ---------
    19-FEB-20
    
    oracle@esmd:~>
    

    示例 2

    #!/bin/sh
    
    username=\"Scott\"
    password=\"@T!ger\"
    
    
    echo username:  $username
    echo password:  $password
    
    testoutput=$(sqlplus -s $username/$password  << EOF
    set pagesize 0 feedback off verify off heading off echo off;
    show user
    SELECT to_char(sysdate,'DD-MM-YYYY HH24:MI')||' Test passed' from dual;
    @ulcase1.sql
    exit;
    EOF
    )
    
    echo $testoutput
    

    输出:

    oracle@esmd:~> ./test_Upper_case.sh
    username: "Scott"
    password: "@T!ger"
    USER is "Scott" 19-02-2020 15:08 Test passed
    oracle@esmd:~>
    

    示例 3 test.sh

    #!/bin/bash
    
    sudo  -H -E  -u oracle  -s "/opt/oracle/test_Upper_case.sh"
    

    输出

    esmd:~ # ./test.sh
    username: "Scott"
    password: "@T!ger"
    USER is "Scott" 19-02-2020 15:50 Test passed
    

    /opt/oracle/test_Upper_case.sh

    !/bin/sh
    
    username=\"Scott\"
    password=\"@T!ger\"
    
    
    echo username:  $username
    echo password:  $password
    
    testoutput=$($ORACLE_HOME/bin/sqlplus -s $username/$password  << EOF
    set pagesize 0 feedback off verify off heading off echo off;
    show user
    SELECT to_char(sysdate,'DD-MM-YYYY HH24:MI')||' Test passed' from dual;
    @/opt/oracle/ulcase1.sql
    exit;
    EOF
    )
    
    echo $testoutput
    

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多