`

shell 调用 sqlplus 各种情况示例

阅读更多

 一、最简单的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--

分享到:
评论

相关推荐

    Oracle基础:程序中调用sqlplus的方式

    本文将深入探讨如何在程序中调用sqlplus,以实现与Oracle数据库的非交互式操作。 首先,sqlplus是Oracle提供的一款强大的数据库管理工具,允许用户通过命令行界面连接到数据库并执行SQL语句。它支持多种操作系统,...

    Unix Oracle Shell Scripting

    大多数任务都可以在任何可用的shell中完成,但每个shell都有不同的属性,这使得它们适用于各种不同的应用场景。例如,Bourne shell(/bin/sh)是一个非常基础的shell,在大多数Unix安装中都很常见。 #### 构建基础 ...

    linux shell 查询oracle数据库中的值 并返回

    在Linux环境中,shell脚本是一种强大的工具,可以与操作系统进行交互并执行各种任务。当我们需要查询Oracle数据库中的数据并返回结果时,可以结合shell脚本和Oracle的SQL命令行工具来实现。这篇博客(虽然链接不可用...

    Linux/Unix shell sql 之间传递变量

     Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本  一、示例  1、shell变量接受sql返回值之方式一 oracle@SZDB:~&gt; more ./retval.sh #!/bin/bash RETVAL=`sqlplus -...

    Linux下定时自动执行Oracle_SQL

    接着,定义输出文件路径,并调用sqlplus工具执行SQL脚本,最终将查询结果保存至指定文件。 - **Crontab配置**:配置文件中定义了执行Shell脚本的频率,例如`1****/home/oracle/ss.sh`表示每小时的第1分钟执行一次...

    多个数据库实例的创建

    - 这些脚本可以被系统初始化脚本调用,以确保数据库实例在系统启动时自动运行。 #### 三、注意事项 1. **监听器配置**:每个数据库实例都需要配置一个监听器,以便客户端可以通过网络访问。监听器的配置文件通常...

    Oracle数据库自动备份脚本-Windows,Linux

    上述脚本设置了Oracle相关的环境变量,然后调用RMAN进行全库备份,并将备份文件存放在指定目录,文件名包含日期和时间戳,便于管理和查找。 在Linux系统中,我们通常使用shell脚本来实现相同的功能。`database...

    Oracle EBS 基于Host(主机文件)并发程序的开发---刘明明

    3. **使用方法**:指明了如何调用此脚本,并给出了一个示例命令。 4. **平台信息**:指出该脚本适用于Unix环境。 5. **历史记录**:记录了脚本的创建者及其创建时间。 6. **脚本主体**: - 定义了多个变量,如程序...

    oracle数据导入和备份的批处理

    通过创建控制文件定义数据格式,然后调用SQL*Loader进行批处理导入。 2. Data Pump(expdp/impdp):Data Pump提供了高效的数据导出和导入功能,支持大容量数据操作。expdp用于导出数据,impdp用于导入。可以指定表...

    最全的数据库

    - **环境变量配置**:通过设置 `$PATH` 来指定 Oracle 的安装路径,以便正确调用 Oracle 命令。 - **查看 Oracle 实例**:使用 `$ORACLE_SID` 查看当前 Oracle 数据库的实例名称。 - **SQL*Plus**: - **命令格式**...

Global site tag (gtag.js) - Google Analytics