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

本文探讨了在使用PL/SQL时遇到的一个奇怪问题,即参数在调用SQL文件过程中导致文件名生成出现歧义。通过分析SQL文件结构和参数传递方式,解释了问题原因,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚用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 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值