如何才能将块函数中的‘&1’注释掉

[复制链接]
查看11 | 回复9 | 2006-1-20 14:25:27 | 显示全部楼层 |阅读模式
declare
begin
/* spool $KES_HOME/tmp/tbl_sys_total_gyosyaSQL.log
delete tbl_sys_total_gyosya where nendo='&1' */
select * from testt;
-- ***** modify start V8.00 *****
/* select nendo, gyosyu_cd, entry_no
from tbl_sys_total_gyosya
where nendo = '&1'; */
SELECT NENDO, GYOSYU_CD, ENTRY_NO_DATA
FROM TBL_TMP_UKETUKE_NO
GROUP BY NENDO,GYOSYU_CD,ENTRY_NO_DATA;
-- ***** modify end V8.00 *****
end;
如上所示,对‘&1’的注释是无效的,程序仍然要让我输入。而如下
/* spool $KES_HOME/tmp/tbl_sys_total_gyosyaSQL.log
delete tbl_sys_total_gyosya where nendo='&1' */
select * from testt;
-- ***** modify start V8.00 *****
/* select nendo, gyosyu_cd, entry_no
from tbl_sys_total_gyosya
where nendo = '&1'; */
SELECT NENDO, GYOSYU_CD, ENTRY_NO_DATA
FROM TBL_TMP_UKETUKE_NO
GROUP BY NENDO,GYOSYU_CD,ENTRY_NO_DATA;
-- ***** modify end V8.00 *****
不生明为块函数却可以注释掉。
想请教,的是如何才能将块函数中的‘&1’注释掉。(不能删除)
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
关注。
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
SQL> create table test (a varchar(20));
表被创建
SQL> insert into test values(chr(38)||'1');
1 行 已插入
SQL> select * from test where a=chr(38)||'1';
A
--------------------
&1
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
select nendo, gyosyu_cd, entry_no
from tbl_sys_total_gyosya
where nendo = '&1';
改成
select nendo, gyosyu_cd, entry_no
from tbl_sys_total_gyosya
where nendo ='&'||'1';
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
多谢各位的帮助。
不好意思各位,可能我没说明白。我不是想在表中加入'&1',或者从表中读出'&1'。
我现在正在做一个改修的项目,所以改动的部分要注释掉使其不能运行。
现在的问题是在注释/*。。。*/ 的范围内,&1 还是有效的,运行到这个理应被注释掉的地方,就会要求我输入数据。 还请大家多帮忙!
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
不可能吧,注释掉了,就不会被执行了。。是不是其他地方还有未注释掉的。。
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
奇就奇在这了, 大家可能验证一下!
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
这有什么奇怪的?你就不能不用&符号注释么?呵呵
&在oracle脚本里是替代变量的含义,就是说,在运行时是由用户指定一个实际的值来直接替换&以及&后面的部分内容的,这和sql中的绑定变量是不同的,脚本在执行时,这里并不是一个被指定了值的变量,而是直接被替换掉的。
看这两个语句:
select * from table where id = :1;
select * from table where id = &1;
执行时,都会要求你给出1这个“变量”的值,但是加入你指定了值是10,那么实际执行的语句分别是:
select * from table where id = :1;
select * from table where id = 5;
前面的还是一个变脸,后面则是直接替换。
[PHP]
zeus@CRMTEMP>declare
2cnt number;
3begin
4/* abc "&1" */
5select count(*) into cnt from tab;
6end;
7/
Enter value for 1:
old 4: /* abc "&1" */
new 4: /* abc "" */
PL/SQL procedure successfully completed.
zeus@CRMTEMP>declare
2cnt number;
3begin
4/* abc ':1' */
5select count(*) into cnt from tab;
6end;
7/
PL/SQL procedure successfully completed.
......................
[/PHP]
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
因为是等待用户来替换的,所以即便是在注释里,也被要求替换
oracle解析脚本的顺序可能是这样:先替换所有的替换变量,然后才开始解析,因此在替换时就没管是否是注释,但冒号开头的变量则是解析完毕,在执行时才要求指定值的。
或者可以勉强这么说,&变量是解析前绑定,而:变量是解析后绑定,呵呵,偶猜测的,还请大侠指正。
回复

使用道具 举报

千问 | 2006-1-20 14:25:27 | 显示全部楼层
谢谢各位,因是改造项目,有些地方需要保留,没办法有些地方不能变通!
除了修改外,看来是无解了,不能被注释掉了!
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行