一、最简单的shell里调用sqlplus.
$ vi test1.sh
#!/bin/bash
sqlplus -S /nolog > result.log <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn u_test/iamwangnc
select * from tab;
exit
EOF
$ chmod +x test1.sh
$ ./test1.sh
二、把sqlplus执行结果传递给shell方法一
注意sqlplus段使用老板键`了, 赋变量的等号两侧不能有空格.
$ vi test2.sh
#!/bin/bash
VALUE=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn u_test/iamwangnc
select count(*) from tab;
exit
EOF`
if [ "$VALUE" -gt 0 ]; then
echo "The number of rows is $VALUE."
exit 0
else
echo "There is no row in the table."
fi
$ chmod +x test2.sh
$ ./test2.sh
三、把sqlplus执行结果传递给shell方法二
注意sqlplus段使用 col .. new_value .. 定义了变量并带参数exit, 然后自动赋给了shell的$?
$ vi test3.sh
#!/bin/bash
sqlplus -S /nolog > result.log <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn u_test/iamwangnc
col coun new_value v_coun
select count(*) coun from tab;
exit v_coun
EOF
VALUE="$?"
echo "The number of rows is $VALUE."
$ chmod +x test3.sh
$ ./test3.sh
四、把shell程序参数传递给sqlplus
$1表示第一个参数, sqlplus里可以直接使用, 赋变量的等号两侧不能有空格不能有空格.
$ vi test4.sh
#!/bin/bash
NAME="$1"
sqlplus -S u_test/iamwangnc <<EOF
select * from tab where tname = upper('$NAME');
exit
EOF
$ chmod +x test4.sh
$ ./test4.sh ttt
五、为了安全要求每次执行shell都手工输入密码
$ vi test5.sh
#!/bin/bash
echo -n "Enter password for u_test:"
read PASSWD
sqlplus -S /nolog <<EOF
conn u_test/$PASSWD
select * from tab;
exit
EOF
$ chmod +x test5.sh
$ ./test5.sh
六、为了安全从文件读取密码
对密码文件设置权限, 只有用户自己才能读写.
$ echo 'iamwangnc' > u_test.txt
$ chmod g-rwx,o-rwx u_test.txt
$ vi test6.sh
#!/bin/bash
PASSWD=`cat u_test.txt`
sqlplus -S /nolog <<EOF
conn u_test/$PASSWD
select * from tab;
exit
EOF
$ chmod +x test6.sh
$ ./test6.sh
七、封装函数调用
linux后台执行oracle sql脚本:
在shell下执行oracle数据库的sql
[plain] view plain copy
#### 函数
#### 说 明:执行sql语句
#### 输入参数:{sql语句}{数据库tns}{数据库用户名}{数据库用户密码}
#### 输出参数:sql执行结果
function exe_sql
{
sql=$1
oracle_sid=$2
user_name=$3
user_pwd=$4
error_code=`
sqlplus -S -L /nolog<<EOF
connect $user_pwd/$user_pwd@$oracle_sid
set termout off;
set echo off;
set feedback off;
set heading off;
set pagesize 0;
$sql;
commit;
quit
EOF`
echo "$error_code"
if [ -z "$error_code" ];then
return 0
else
return 1
fi
}
--End--
相关推荐
本文将深入探讨如何在程序中调用sqlplus,以实现与Oracle数据库的非交互式操作。 首先,sqlplus是Oracle提供的一款强大的数据库管理工具,允许用户通过命令行界面连接到数据库并执行SQL语句。它支持多种操作系统,...
大多数任务都可以在任何可用的shell中完成,但每个shell都有不同的属性,这使得它们适用于各种不同的应用场景。例如,Bourne shell(/bin/sh)是一个非常基础的shell,在大多数Unix安装中都很常见。 #### 构建基础 ...
在Linux环境中,shell脚本是一种强大的工具,可以与操作系统进行交互并执行各种任务。当我们需要查询Oracle数据库中的数据并返回结果时,可以结合shell脚本和Oracle的SQL命令行工具来实现。这篇博客(虽然链接不可用...
Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一、示例 1、shell变量接受sql返回值之方式一 oracle@SZDB:~> more ./retval.sh #!/bin/bash RETVAL=`sqlplus -...
接着,定义输出文件路径,并调用sqlplus工具执行SQL脚本,最终将查询结果保存至指定文件。 - **Crontab配置**:配置文件中定义了执行Shell脚本的频率,例如`1****/home/oracle/ss.sh`表示每小时的第1分钟执行一次...
- 这些脚本可以被系统初始化脚本调用,以确保数据库实例在系统启动时自动运行。 #### 三、注意事项 1. **监听器配置**:每个数据库实例都需要配置一个监听器,以便客户端可以通过网络访问。监听器的配置文件通常...
上述脚本设置了Oracle相关的环境变量,然后调用RMAN进行全库备份,并将备份文件存放在指定目录,文件名包含日期和时间戳,便于管理和查找。 在Linux系统中,我们通常使用shell脚本来实现相同的功能。`database...
3. **使用方法**:指明了如何调用此脚本,并给出了一个示例命令。 4. **平台信息**:指出该脚本适用于Unix环境。 5. **历史记录**:记录了脚本的创建者及其创建时间。 6. **脚本主体**: - 定义了多个变量,如程序...
通过创建控制文件定义数据格式,然后调用SQL*Loader进行批处理导入。 2. Data Pump(expdp/impdp):Data Pump提供了高效的数据导出和导入功能,支持大容量数据操作。expdp用于导出数据,impdp用于导入。可以指定表...
- **环境变量配置**:通过设置 `$PATH` 来指定 Oracle 的安装路径,以便正确调用 Oracle 命令。 - **查看 Oracle 实例**:使用 `$ORACLE_SID` 查看当前 Oracle 数据库的实例名称。 - **SQL*Plus**: - **命令格式**...