有时候必须在shell中执行sql脚本,下面列举shell 中利用sqlplus 执行sql脚本的简便方式


$ cat sql/test.sql 

SET      pagesize 0

SET      heading OFF

SET      feedback OFF

SET verify OFF

select &1 from &2; 

QUIT;



sqlplus / as sysdba @sql/test.sql sysdate dual


注意:参数必须用&[1-9]表示,不然搜索传不进去,会提示让手动输入参数



如果脚本中有重复用到相同的值,如果&1=&2:

$cat sql/tes2.sql

SET      pagesize 0

SET      heading OFF

SET      feedback OFF

SET verify OFF

delete scott.emp where empno=&1  or deptno=&2;  

commit;  

QUIT;


执行时,就必须传2个参数:

sqlplus "scott/tiger@test" @sql/tes2.sql 10 10  



小窍门: 用procedure就可以不用传多个相同的参数,则只用传1个参数:


$ cat sql/test3.sql

declare  

    var_no number:=&1;  

begin  

    delete scott.emp where no=var_no or deptno=var_no;  

    commit;  

end;  


sqlplus "scott/tiger@test" @sql/test3.sql 10



shell 执行MySQL命令


mysql -uxxxx -pxxxx  --batch -e 'show full processlist' -S /mysql/rpl_semi/dbdata/mysql.sock | grep -iv Sleep