PL/SQL传参中一个很奇怪的一个问题

刚用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 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值