[英]How to pass a bash variable to sqlplus and then pass that output to another variable
[英]how to passing variable from bash to sqlplus
我在bash中有以下代码:
#/!bin/bash
USERS=tom1,tom2,tom3
我想通过sqlplus从变量“ USERS”中删除所有用户
#/!bin/bash
USERS=tom1,tom2,tom3
sqlplus -s system/*** <<EOF
*some code*
DROP USER tom1 CASCADE;
DROP USER tom2 CASCADE;
DROP USER tom2 CASCADE;
EOF
请帮助
使用USERS
变量使用sql / plsql在数据库中进行拆分很复杂,并且需要了解REGEXP
函数,因此我不建议您这样做。 而且,它还需要Dynamic Sql来执行drop
查询。
我建议您在shell脚本中拆分它,创建一个脚本并在sqlplus中执行它
USERS="tom1,tom2,tom3"
echo ${USERS} | tr ',' '\n' | while read word; do
echo "drop user $word;"
done >drop_users.sql
sqlplus -s system/pwd <<EOF
#some code
@drop_users.sql
EOF
您的代码正常, userDrop.sh
脚本文件的USERS
参数派生的Oracle DB的DDL命令调用userDrop.sh
。 为了与USERS
参数和DB
建立适当的关系,应生成一个额外的文件( drpUsr.sql
),并在带有@
符号前缀的EOF
标记内调用该文件。
让我们用vi
命令编辑:
$ vi userDrop.sh
#!/bin/bash
USERS=tom1,tom2,tom3
IFS=',' read -ra usr <<< "$USERS" #--here IFS(internal field separator) is ','
for i in "${usr[@]}"; do
echo "drop user "$i" cascade;"
done > drpUsr.sql
#--to drop a user a privileged user sys or system needed.
sqlplus / as sysdba <<EOF
@drpUsr.sql;
exit;
EOF
称为
$ . userDrop.sh
并且不要忘记通过DB的exit
命令返回到命令提示符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.