2013-02-26 37 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一开始,你也可能有你自己的。