エイバ :
目的:シェルプロンプトからパラメータとして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プロンプトを取得
また、試してみました:
A)
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。SET ECHOオフ。オフ見出しセット。/tmp/downloads/oracle/instl/script/createschema.sql; 出口; EOF」
しかし)a)とbの両方でエラーになって。
シェルプロンプトからパラメータとしてSQLスクリプトファイルのパスとSQLPLUSを起動するには私を導いてください。
ドミトリー徳敏:
例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