我正在尝试编写一个sqlplus命令,该命令根据存储在.sql文件中的查询创建一个表.
包含查询的特定.sql文件将作为变量(& v_InputQuery)提供给我的sqlplus命令.
我尝试过类似的东西,但它不起作用.
CREATE TABLE &v_OutputTable AS ( < &v_InputQuery ) ;
我收到一条错误消息,说明缺少SELECT关键字.
我真正喜欢的是& v_InputQuery不能替换为用户指定的文件名,而是替换文件的实际内容.有没有办法做到这一点?
非常感谢你.
解决方法
不幸的是,您不能创建sql * Plus命令,而是创建一个shell脚本来执行它!
让我们说my_script.sh在下面
#you can always complete the user interaction at unix/dos USER=your_user PASS=your_pass DB=your_db OUTPUT_TABLE=$1; QUERY_FILE=$2; SELECT_QUERY=`cat $QUERY_FILE`; sqlplus -S ${USER}/${PASS}@${DB} << ! SET SERVEROUTPUT ON; VAR EXITCODE NUMBER; BEGIN EXECUTE IMMEDIATE ' CREATE TABLE $OUTPUT_TABLE AS $SELECT_QUERY '; :EXITCODE := sqlCODE; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(sqlERRM); :EXITCODE := sqlCODE; END; / exit :EXITCODE !
执行如下脚本(取决于操作系统)
ksh my_script MY_OUTPUT_TABLE my_sql.sql;