2013-02-26 54 views
0

我試圖寫它提示模式所有者並丟棄所有相應模式的bash函數。錯誤,同時通過bash的用戶輸入的SQL語句

function db_cleanup 

{ 
     #accept user input 
     read -p "Schema Owner: " input 

     sqlplus -s $usr1/[email protected]$sid1 << EOF 


declare 
     usr_d varchar2(10) := '&input'; --reas user input here 
     sqlstmt varchar2(128); 
begin 
     sqlstmt := 'drop user '||$usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); execute immediate sqlstmt; 

     sqlstmt := 'drop user ab_'||$usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); execute immediate sqlstmt; 

     sqlstmt := 'drop user xy_'||$usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); execute immediate sqlstmt; 
end; 
/
EOF 
} 

輸出的樣子:

Enter Schema Owner: ABC 
    Enter value for usr_in: 
    User requested Interrupt or EOF detected. 

-bash-3.2$ 

請讓我知道如何解決這一問題之一。提前致謝。

+0

你不應該用'> EOF'完成嗎? – fedorqui 2013-02-26 20:43:38

+0

認爲它應該是''input''而不是''input'',在'declare'下面的行中。也許''$ usr_d'而不是'$ usr_d' – 244an 2013-02-26 20:55:10

+0

@ 244an:用'&input'替換'$ input'修復了一個問題,即我沒有看到'輸入usr_in:'的值。但後者仍然有問題 - 'sqlstmt:='drop user'||||'級聯'; PLS-00103:遇到符號「|」在需要下列之一時: ( - +殼體模新空<標識符> '' – itsh 2013-02-26 21:27:18

回答

0

從@ 244an和我一起拉動評論:

  • '&input''$input',因爲你指的是一個shell變量。
  • $usr_d應該是usr_d(沒有$),因爲你是而不是這裏指的是變量變量;這是來自PL/SQL declare部分。
  • -s標誌到SQL * Plus抑制橫幅;但你原來的問題表明,不知道你是否已經失去了這個方向。

所以:

function db_cleanup 
{ 
     #accept user input 
     read -p "Schema Owner: " input 

     sqlplus -s $usr1/[email protected]$sid1 << EOF 
set timing off 
set feedback off 
set serverputput on size 10000 
spool $log_file.out 

declare 
     usr_d varchar2(10) := '$input'; 
     sqlstmt varchar2(128); 
begin 
     sqlstmt := 'drop user '||usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); 
     execute immediate sqlstmt; 

     sqlstmt := 'drop user ab_'||usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); 
     execute immediate sqlstmt; 

     sqlstmt := 'drop user xy_'||usr_d||' cascade'; 
     dbms_output.put_line(sqlstmt); 
     execute immediate sqlstmt; 
end; 
/
EOF 
} 

不知道你可能要清理你給出的架構......還有一些用戶,你真的不想意外下降。 Any of these一開始,你也可能有你自己的。