查看: 13587|回复: 76

[原创] 【讨论】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
发表于 2014-10-27 15:59 | 显示全部楼层 |阅读模式
我们都知道,Oracle中的注释有三种:
A、单行注释
   -- 被注释的文字
B、多行注释
/*  被注释
     的文字
*/

C、单行注释
REM  被注释的文字

其中,A和B是我们最常用到的注释方式,但你是否知道,这其中隐藏着一个大大的陷阱?
论坛徽章:
52
2013年新春福章
日期:2013-02-25 14:51:242010新春纪念徽章
日期:2010-03-01 11:08:33红宝石
日期:2012-12-10 15:19:57红宝石
日期:2013-10-18 14:25:422014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-04-09 09:49:162015年新春福章
日期:2015-03-06 11:58:18马上有钱
日期:2014-02-18 16:43:09奔驰
日期:2013-08-19 14:21:04劳斯莱斯
日期:2013-09-30 14:39:11
发表于 2014-10-27 16:02 | 显示全部楼层
什么意思啊

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
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
 楼主| 发表于 2014-10-27 16:03 | 显示全部楼层
本帖最后由 lastwinner 于 2014-10-27 16:04 编辑

这是一段脚本,在scott用户下运行
  1. /*recreate sequence*/
  2. drop sequence emp_seq;
  3. create sequence emp_seq start with 9000;
  4. /****recreation done****/
  5. delete from emp where empno>=9000
  6. /
  7. insert into emp(empno, ename) values(emp_seq.nextval,'lastwiner')
  8. /
  9. /*atfer insert a row, let's query*/
  10. commit;
  11. select count(*) from emp where empno>=9000;
复制代码
如果不运行,你能准确说出每条SQL语句运行的结果,那就OK










-----------------------------------------------

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
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
 楼主| 发表于 2014-10-27 16:07 | 显示全部楼层
本帖最后由 lastwinner 于 2014-10-29 10:29 编辑

下面是在Oracle 11.2.0.1下运行的结果

  1. drop sequence emp_seq
  2.               *
  3. 第 1 行出现错误:
  4. ORA-02289: 序列不存在
  5. 序列已创建。


  6. 已删除0行。


  7. 已创建 1 行。


  8. 已创建 1 行。


  9. 提交完成。


  10.   COUNT(*)
  11. ----------
  12.          2

复制代码
上面是初次运行,紧接着再次运行的结果为


  1.   COUNT(*)
  2. ----------
  3.          2


  4. 序列已删除。


  5. 序列已创建。


  6. 已删除2行。


  7. 已创建 1 行。


  8. 已创建 1 行。


  9. 提交完成。


  10.   COUNT(*)
  11. ----------
  12.          2


复制代码
这下,你看明白了吗?

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
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
 楼主| 发表于 2014-10-27 16:07 | 显示全部楼层
xbdqb 发表于 2014-10-27 16:02
什么意思啊

看3#  

使用道具 举报

回复
论坛徽章:
52
2013年新春福章
日期:2013-02-25 14:51:242010新春纪念徽章
日期:2010-03-01 11:08:33红宝石
日期:2012-12-10 15:19:57红宝石
日期:2013-10-18 14:25:422014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-04-09 09:49:162015年新春福章
日期:2015-03-06 11:58:18马上有钱
日期:2014-02-18 16:43:09奔驰
日期:2013-08-19 14:21:04劳斯莱斯
日期:2013-09-30 14:39:11
发表于 2014-10-27 16:11 | 显示全部楼层
      

使用道具 举报

回复
认证徽章
论坛徽章:
244
2015年新春福章
日期:2015-05-28 10:58:322015年新春福章
日期:2015-03-19 09:32:472015年新春福章
日期:2015-03-06 11:58:182015年新春福章
日期:2015-05-21 11:46:522015年新春福章
日期:2015-05-22 13:32:002015年新春福章
日期:2015-06-25 14:26:362015年新春福章
日期:2015-07-01 17:15:212015年新春福章
日期:2015-07-01 17:15:212015年新春福章
日期:2015-07-01 17:12:082015年新春福章
日期:2015-05-18 13:50:34
发表于 2014-10-27 16:25 | 显示全部楼层
let me have a look

使用道具 举报

回复
论坛徽章:
2
2015年新春福章
日期:2015-03-04 14:55:132015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-10-27 16:35 | 显示全部楼层
倒要看看!!

使用道具 举报

回复
论坛徽章:
2
2015年新春福章
日期:2015-03-04 14:55:132015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-10-27 16:37 | 显示全部楼层
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE        11.2.0.3.0        Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL>
SQL> /*recreate sequence*/
  2  drop sequence emp_seq;
/*recreate sequence*/
drop sequence emp_seq
ORA-02289: 序列不存在
SQL> create sequence emp_seq start with 9000;
Sequence created
SQL> /****recreation done****/
  2  delete from emp where empno>=9000
  3  /
1 row deleted
SQL> insert into emp(empno, ename) values(emp_seq.nextval,'lastwiner')
  2  /
1 row inserted
SQL> /*atfer insert a row, let's query*/
  2  commit;
Commit complete
SQL> select count(*) from emp where empno>=9000;
  COUNT(*)
----------
         1

SQL>
SQL> /*recreate sequence*/
  2  drop sequence emp_seq;
Sequence dropped
SQL> create sequence emp_seq start with 9000;
Sequence created
SQL> /****recreation done****/
  2  delete from emp where empno>=9000
  3  /
1 row deleted
SQL> insert into emp(empno, ename) values(emp_seq.nextval,'lastwiner')
  2  /
1 row inserted
SQL> /*atfer insert a row, let's query*/
  2  commit;
Commit complete
SQL> select count(*) from emp where empno>=9000;
  COUNT(*)
----------
         1

使用道具 举报

回复
认证徽章
论坛徽章:
2
优秀写手
日期:2014-08-22 06:00:03慢羊羊
日期:2015-03-11 16:58:50
发表于 2014-10-27 16:43 | 显示全部楼层
本帖最后由 fuzhangpeng 于 2014-10-28 11:27 编辑

ca ...have a look.....
insert into emp1(empno, ename) values(emp_seq.nextval,'lastwiner')
  2  /

1 row created.

scott@szdb> /**atfer insert a row, let's query*/   <--这样没事
scott@szdb> /*atfer insert a row, let's query*/      <--这样就触发了bug..被oracle当做了'/'

1 row created.

以后记得注释的时候用/**而不要用/*

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

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