如何在shell中调SQLPLUS 执行SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在shell中调SQLPLUS 执行SQL语句相关的知识,希望对你有一定的参考价值。

参考技术A 1、实例1,获取TABLESPACE_NAME列表
#!/bin/sh
. ~/.bash_profile
sqlplus -s 'user/234256' <<EOF
spool v.txt
set linesize 200
col TABLESPACE_NAME format a50
col file_name format a50
select distinct(TABLESPACE_NAME) from dba_data_files order by TABLESPACE_NAME;
spool off
EOF
2、一句
echo -e "drop table test_BAK purge;"|sqlplus -s 'user/123499'
3、执行sql文件实例
#!/bin/bash
. ~/.bash_profile
sqlplus -s 'user/234256' @~/remove_old_data.sql本回答被提问者采纳

如何在 shell 脚本中运行 SQL 查询时获得类似 SQLPLUS 的输出

【中文标题】如何在 shell 脚本中运行 SQL 查询时获得类似 SQLPLUS 的输出【英文标题】:How to get output like SQLPLUS while Running SQL Query in shell script 【发布时间】:2013-08-04 08:17:53 【问题描述】:

我有一个如下的 shell 脚本

RETVAL=`sqlplus -silent user/password <<EOF
SET PAGESIZE 9990

SELECT   id, type, count(*) "count" FROM event

EXIT;
EOF`

echo $RETVAL

它的输出像

ID 类型计数 ------------- ---------- ----------- 2 11 2 1 4 1 2 10 29 1 1 35 2 1 6 2 18 1 2 2 3 7 行已选择

但我想要像这样的输出

ID              TYPE        count
------------- ---------- -----------
        2         11           2
        1          4           1
        2         10          29
        1          1          35
        2          1           6
        2         18           1
        2          2           3

已选择 7 行。

我试图弄清楚我是否得到了一些换行符,但找不到。

问候,

【问题讨论】:

【参考方案1】:

您的变量包含换行符,但您显示它的方式会删除它们。

echo 语句替换为:

echo "$RETVAL"

这样,shell 就不会弄乱换行符了。您几乎应该总是引用可以包含需要保留的任何形式的空格的变量。

【讨论】:

以上是关于如何在shell中调SQLPLUS 执行SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell 中将sql语句执行结果写入日志中

shell脚本中怎么写sql语句

在shell脚本执行sql语句为啥会报错

LINUX下shell脚本如何执行 sql脚本 到DB2数据库?

如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)

在shell脚本中使用 isql 执行SQL语句 查询sybase数据库中满足条件的记录条数,怎么把查询结果赋给变量?