簡體   English   中英

如何將變量從bash傳遞到sqlplus

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM