刚用PL/SQL, 今天碰到一个很奇怪的问题,实在百思不得其解。
不知道什么原因引起的。
问题如下:
----------------------------------------------------------------------------
1) 我在shell脚本中使用sqlplus 调用SQL文件, 向这个SQL文件传递了一个参数
===== File : myshell.sh ================
sqlplus -s $account << EOF
@SQL_FILE_1.sql _k1
EOF
===============================
2) 在SQL_FILE_1.sql 中继续调用其它SQL文件,向某个指定的SQL传入两个参数
===== SQL_FILE_1.sql ================
@OTHER_SQL.sql 0101 &1
@OTHER_SQL.sql 0102 &1
@OTHER_SQL.sql 0103 &1
...
===============================
3) OTHER_SQL.sql的定义
===== OTHER_SQL.sql ================
SET HEADING OFF
SET TERMOUT OFF
SET PAUSE OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET TRIMSPOOL OFF
SET ECHO OFF
SET VERIFY OFF
SET CONCAT ON
spool select_table_&1&2.csv
SELECT col1,col2,col3 from T1;
spool off
================================
好了,按照我的想法,OTHER_SQL.sql中生成的文件应该是:
select_table_0101_k1.csv
select_table_0102_k1.csv
select_table_0103_k1.csv
可是,运行后,实际OTHER_SQL.sql中生成的文件是:
select_table_0101_k1.csv
select_table_01020101.csv
select_table_01030102.csv
========================================
========================================
以上,如果把(2)SQL_FILE_1.sql中的代码改成:
@OTHER_SQL.sql 0101 &1
@OTHER_SQL.sql 0102 &2
@OTHER_SQL.sql 0103 &2
那么,OTHER_SQL.sql中产生的文件就是:
select_table_0101_k1.csv
select_table_0102_k1.csv
select_table_0103_k1.csv
很奇怪,一直搞不明白,究竟PL/SQL中参数难道还有这种效果?原因是什么????
还有,我如何才能做到在调用@OTHER_SQL.sql时,只使用&1,而不是使用有歧义的&2 .
不知道什么原因引起的。
问题如下:
----------------------------------------------------------------------------
1) 我在shell脚本中使用sqlplus 调用SQL文件, 向这个SQL文件传递了一个参数
===== File : myshell.sh ================
sqlplus -s $account << EOF
@SQL_FILE_1.sql _k1
EOF
===============================
2) 在SQL_FILE_1.sql 中继续调用其它SQL文件,向某个指定的SQL传入两个参数
===== SQL_FILE_1.sql ================
@OTHER_SQL.sql 0101 &1
@OTHER_SQL.sql 0102 &1
@OTHER_SQL.sql 0103 &1
...
===============================
3) OTHER_SQL.sql的定义
===== OTHER_SQL.sql ================
SET HEADING OFF
SET TERMOUT OFF
SET PAUSE OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET TRIMSPOOL OFF
SET ECHO OFF
SET VERIFY OFF
SET CONCAT ON
spool select_table_&1&2.csv
SELECT col1,col2,col3 from T1;
spool off
================================
好了,按照我的想法,OTHER_SQL.sql中生成的文件应该是:
select_table_0101_k1.csv
select_table_0102_k1.csv
select_table_0103_k1.csv
可是,运行后,实际OTHER_SQL.sql中生成的文件是:
select_table_0101_k1.csv
select_table_01020101.csv
select_table_01030102.csv
========================================
========================================
以上,如果把(2)SQL_FILE_1.sql中的代码改成:
@OTHER_SQL.sql 0101 &1
@OTHER_SQL.sql 0102 &2
@OTHER_SQL.sql 0103 &2
那么,OTHER_SQL.sql中产生的文件就是:
select_table_0101_k1.csv
select_table_0102_k1.csv
select_table_0103_k1.csv
很奇怪,一直搞不明白,究竟PL/SQL中参数难道还有这种效果?原因是什么????
还有,我如何才能做到在调用@OTHER_SQL.sql时,只使用&1,而不是使用有歧义的&2 .