7

如何在设置变量时在 shell 脚本中运行 SQL 命令?我试过这个方法,它没有执行命令,它认为命令只是一个字符串。

#!/bin/ksh
variable1=`sqlplus -s username/pw@oracle_instance <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select count(*) from table;
EXIT;
EOF`
if [ -z "$variable1" ]; then
  echo "No rows returned from database"
  exit 0
else
  echo $variable1
fi
4

5 回答 5

9
#!/bin/ksh
variable1=$( 
echo "set feed off
set pages 0
select count(*) from table;
exit
"  | sqlplus -s username/password@oracle_instance
)
echo "found count = $variable1"
于 2013-10-04T13:21:05.067 回答
7

您可以使用heredoc。例如从提示:

$ sqlplus -s username/password@oracle_instance <<EOF
set feed off
set pages 0
select count(*) from table;
exit
EOF

所以sqlplus会将所有内容都消耗EOF为标准输入。

于 2013-10-04T13:23:56.020 回答
0

也许回答为时已晚,但是有一个有效的代码:

sqlplus -s "/ as sysdba" << EOF
    SET HEADING OFF
    SET FEEDBACK OFF
    SET LINESIZE 3800
    SET TRIMSPOOL ON
    SET TERMOUT OFF
    SET SPACE 0
    SET PAGESIZE 0
    select (select instance_name from v\$instance) as DB_NAME,
           file_name
      from dba_data_files
     order by 2;
于 2014-02-10T09:03:28.150 回答
0
sqlplus -s /nolog <<EOF
whenever sqlerror exit sql.sqlcode;
set echo on;
set serveroutput on;

connect <SCHEMA>/<PASS>@<HOST>:<PORT>/<SID>;

truncate table tmp;

exit;
EOF
于 2014-12-31T14:35:27.463 回答
0

代码

PL_CONNECT_STRING="$DB_USERNAME/$DB_PASSWORD@$DB_SERVICE"

OUTPUT=$(sqlplus -s $PL_CONNECT_STRING <<-END-OF-SQL
           select count(*) from table;
exit;
END-OF-SQL)
echo "COMPLETED GATHER STATS $OUTPUT";

解释:

PL_CONNECT_STRING携带数据库用户名、密码和它的服务名称

sqlplus 用于连接数据库和PL_CONNECT_STRING详细信息

END-OF-SQL标签包含您要执行的查询

echo用于打印查询的输出

注意:您可以在END-OF-SQL标签内提供多个查询,因此它对于批量执行也很有用

于 2018-02-23T11:06:57.793 回答