首页 - 数据库 - Oracle

关于/**/注释段在SQLPlus Worksheet中的问题(2004.12.15随笔)

发布时间: 2007-04-19 05:47    作者: 未知    来源: 未知    浏览:    评论


今天在Oracle 9i 的SQLPlusWorksheet中发现一个特别怪奇的问题,看如下语句,是先清除sys_object表,然后在该表中insert3条数据,在Golden32的5.7版本中执行完全正常:

/*====================*/
/*Object Data         */
/*====================*/

delete from sys_object;

/*Merchant*/
--Merchant Group
insert into sys_object("OBJECT_ID","OBJECT_NAME","MENU_ID","OBJECT_TYPE","OBJECT_USER","PROCESS","CREATE_USER","CREATE_TS","ITEM_SEQ","OBJECT_SEQ")VALUES('M_MERCGR','Merchant Group','M_MERC','W','A','merchant/mercgr_browse.asp','SYSTEM',SYSDATE,3,4);

/*MPS Operation*/
insert into sys_object("OBJECT_ID","OBJECT_NAME","MENU_ID","OBJECT_TYPE","OBJECT_USER","PROCESS","CREATE_USER","CREATE_TS","ITEM_SEQ","OBJECT_SEQ")VALUES('M_OPER','MPS Operation',NULL,'M','A','','SYSTEM',SYSDATE,2,5);
--Payment Adjustment
insert into sys_object("OBJECT_ID","OBJECT_NAME","MENU_ID","OBJECT_TYPE","OBJECT_USER","PROCESS","CREATE_USER","CREATE_TS","ITEM_SEQ","OBJECT_SEQ")VALUES('M_PAYADJ','Payment Adjustment','M_OPER','W','A','operation/payadj_browse.asp','SYSTEM',SYSDATE,1,6);
commit;

但在Oracle 9i 的SQLPlusWorksheet中执行时,出现的提示却是这样的:

已删除3行。


已删除0行。


已创建 1 行。

insert into sys_object("OBJECT_ID","OBJECT_NAME","MENU_ID","OBJECT_TYPE","OBJECT_USER","PROCESS","CREATE_USER","CREATE_TS","ITEM_SEQ","OBJECT_SEQ")VALUES('M_MERCGR','Merchant Group','M_MERC','W','A','merchant/mercgr_browse.asp','SYSTEM',SYSDATE,3,4)
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (HYH.PK_SYS_OBJECT)

 

已创建 1 行。


已创建 1 行。


提交完成。

我郁闷,语句好好的为什么会出错,看出错信息是表示在PK字段insert了重复的值,想了半天,顿悟!WorkSheet分明是在蒙我,数据我都delete了,而且俺的PK字段是OBJECT_ID字段,不可能有重复的,再仔细看一下返回信息,发现问题了,我明明只写了一条delete语句,却返回的两条delete信息,难道是delete执行了两次?假如是执行了两次,那么第二次执行的时候已经没数据了,所以delete了0,为什么执行了两次呢?

再看代码发现一个问题:
delete之后是注释块:/*Merchant*/
再看报PK错误的那一行:
之后也是注释块:/*MPS Operation*/
难道是/**/搞的鬼?
好,试一下,把两个注释块都改为--开头,再Run……
,正常了……,真是气死我了,果真是/**/的问题,那为什么为这个注释块没问题:
/*====================*/
/*Object Data         */
/*====================*/
注:该块之前还是有其它语句的。

多次测试发现,/*后面直接跟26个英文字母的注释块会导致WorkSheet把该注释块前的语句重新执行一次!
/*大小写字母*/

其实好像是:这样的注释/*大小写字母*/使SQLPlus Worksheet重新执行了缓冲区中的命令行!

不知我写的或我理解的对不对,反正我的问题解决了,有疑问的话就自己试试吧


TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多