查看: 3802|回复: 17

[PL/SQL] 【大话IT】PL/SQL传参中一个很奇怪的一个问题

[复制链接]
论坛徽章:
0
发表于 2015-3-3 11:13 | 显示全部楼层 |阅读模式
刚用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 .
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
发表于 2015-3-3 11:31 | 显示全部楼层

回帖奖励 +5

绑定变量

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2015-3-3 12:20 | 显示全部楼层
楼上正解。已经OK了。
sqlplus中使用define指定变量,在SQL文件中使用变量就不会错乱了。

使用道具 举报

回复
认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2015-3-3 13:27 | 显示全部楼层

回帖奖励 +5

回帖奖励 +5 pub币 容许我水一下

使用道具 举报

回复
认证徽章
论坛徽章:
171
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB社区12周年站庆徽章
日期:2013-08-13 16:52:38itpub13周年纪念徽章
日期:2014-10-08 15:21:35ITPUB14周年纪念章
日期:2015-10-26 17:23:44ITPUB15周年纪念
日期:2018-02-09 14:12:58ITPUB18周年纪念章
日期:2018-09-17 10:09:49状元
日期:2015-11-19 12:58:23榜眼
日期:2015-11-19 12:58:23探花
日期:2015-11-19 12:58:23
发表于 2015-3-3 16:35 | 显示全部楼层

回帖奖励 +5

继续水一下

使用道具 举报

回复
论坛徽章:
5
马上有对象
日期:2014-11-18 19:34:01马上有对象
日期:2014-11-24 20:41:20沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47天蝎座
日期:2015-07-28 15:20:51
发表于 2015-3-3 19:22 | 显示全部楼层

回帖奖励 +5

学习ing

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-3-3 21:19 | 显示全部楼层

回帖奖励 +5

这是替换变量

使用道具 举报

回复
招聘 : 数据库开发
认证徽章
论坛徽章:
0
发表于 2015-3-12 15:01 | 显示全部楼层

回帖奖励 +5

没看懂~

使用道具 举报

回复
论坛徽章:
18
奥运会纪念徽章:沙滩排球
日期:2012-06-15 18:46:552015年新春福章
日期:2015-03-06 11:58:39慢羊羊
日期:2015-03-04 14:53:33马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2014-01-24 06:00:15三菱
日期:2013-08-21 16:52:31奔驰
日期:2013-07-30 17:57:36比亚迪
日期:2013-07-30 17:57:36Jeep
日期:2013-07-30 17:57:36
发表于 2015-3-12 17:27 | 显示全部楼层

回帖奖励 +5

本帖最后由 278676125 于 2015-3-12 17:27 编辑

和PL/SQL有关系?

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2015-3-12 17:53 | 显示全部楼层

回帖奖励 +5

记得  @OTHER_SQL.sql     要换成  @@OTHER_SQL.sql   会更好
不过如果在当前目录下执行就无所谓了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表