有时候,需要在shell脚本中执行sql语句。怎么把这两个毫不相干的东西联系到一起呢??根据经验,这里提供两种方法。如果你有更好的方法,欢迎你提出来给大家分享。下面以select sysdate from dual为例来解决这两种方法。
第一种方式是使用输入重定向的方法,把要执行的sql语句全部放入到重定向的块中。
下面是这种方法的shell脚本:
[oracle@localhost ~]$ cat sql_mode1.sh
#!/bin/ksh
sqlplus sys/oracle@wyln as sysdba 1>sql.log 2>&1 <<EOF!
select sysdate from dual;
exit;
EOF!
cat sql.log
[oracle@localhost ~]$
我们来看下执行的结果:
[oracle@localhost ~]$ ./sql_mode1.sh
SQL*Plus: Release 11.1.0.6.0 - Production on Tue Dec 22 23:14:25 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
SYSDATE
---------------
22-DEC-09
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@localhost ~]$
从执行结果来看,使用了sql语句得出了执行的结果为22-DEC-09这个是正确的。
第二种方式,先生成一个sql脚本,在这个sql脚本里面执行连接数据库、sql语句等,然后再退出。下面是该方法的sql脚本:
[oracle@localhost ~]$ cat sql_mode2.sh
#!/bin/ksh
echo "conn sys/oracle@wyln as sysdba
select sysdate from dual;
exit;" > sel.sql
sqlplus /nolog @sel.sql 1>sql.log 2>&1
cat sql.log
[oracle@localhost ~]$
下面来看执行的结果怎么样:
[oracle@localhost ~]$ ./sql_mode2.sh
S
QL*Plus: Release 11.1.0.6.0 - Production on Tue Dec 22 23:28:40 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected.
SYSDATE
---------------
22-DEC-09
Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@localhost ~]$
这两种方法都可以实现执行sql语句,根据你的习惯,选择合适你的方法。
注
意:1、因为这里是在oracle用户执行的,所以在前面没有导入ORACLE_HOME和PATH环境变量,如果要做的通用,需要在前面导入环境变量。
2、执行的最后一条语句一定是“exit;”,否则后果很严重,就是脚本永远退不出来,导致挂死。具体你可以自己测试一下。3、执行的结果需要重定向到日
志文件。sql语句的成功与否,我们没有办法通过返回值来判断。
分享到:
相关推荐
dbExecurteSQL.sh:数据库执行SQL脚本 根据配置文件获取数据库连接,根据传入sql执行sql 调用案例:dbConnectTest.sh "pssc_jk" "select sysdate from dual;" 参数介绍: "pssc_jk" 指配置文件中配置的数据库...
主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中、命令行调用单独的SQL文件、使用管道符调用SQL文件等方法,需要的朋友可以参考下
在shell脚本中向SQL文件传递参数,并且在shell脚本中执行SQL文件。
脚本只需配置/etl/sql/sql_mb.txt模板中的SQL语句,以及配置/etl/sql/filename.txt文件中对应的文件名称即可将数据卸载到对应文件名称的文本文档中,配置自由。 脚本中包括数据卸载,编码转换(GBK转UTF8),获取...
在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写。 一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行。本篇文章,我们可以通过写shell脚本来执行...
本文主要讨论了如何将shell脚本的参数传递到SQL脚本之中并执行SQL查询。 有关shell与SQL之间的变量传递,请参考:Linux/Unix shell sql 之间传递变量 1、启动sqlplus时执行脚本并传递参数 robin@SZDB:~/...
使用一般的mysql命令或者是sql脚本都可以插入数据到mysql数据表中,我这里介绍如何是Shell批量的从CSV文件中添加数据到mysql数据库中,方便数据迁徙,测试数据的添加之类的工作。
NULL 博文链接:https://bicashy.iteye.com/blog/1522713
/bin/bash#********************************##并发后台运行fun ##for wanggy 2012-01-25 ##note: ##fun_num fun函数后台运行次数 ##sql_num 每个函数sql运行次数 ##********************************##数据库...
脚本执行命令如下: ~~~ sh backup-ch.sh ip port user password db chdir(clickhouse安装目录) sql_dir(sql文件路径) ~~~ 参数灵活配置。拥有7个参数。可满足多种场景。 ~~~ 支持crontab定时调度。 ~~~ 适用于...
shell和bat处理sql脚本
.向shell中传参数的方法,后面是...3.通过shell调用sql脚本,并向其中传参数的方法: echo "@a.sql $1"|sqlplus $1/$2 4.sql脚本接收参数的方法 define v_str=&1 begin p_insert_log('test','&v_str'); end; /
开启SQL 的xp_cmdshell脚本
今天这个备份分二个版本一个是linux上直接安装的mysql,另一种是docker上安装的mysql。基本操作都一样只是备份sql语句不同而已。可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab ...
mysql导出指定表并分表存储sql文件且压缩的shell脚本,数据库数据过大时,可以用于数据库备份
shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) student.sql,可以导入到数据库中做假数据,方便处理练习数据库操作
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql...
接下来就分析AO表与HEAP表的问题以及如何解答,执行空间的释放有3中方法分别是: 1、执行VACUUM。(当膨胀率大于gp_appendonly_compaction_threshold参数时),为共享锁。 2、执行VACUUM FULL。(不管gp_appendonly_...
2.使用root执行脚本,命令最好是source install-dbsql.sh,否则mysql命令无法在最后生效 3.请确保端口3306(可更改)没有被占用,安全要求默认端口3306不可启用 4.请尽量确保yum源可用 5.暂时不支持centos和redhat 版本...