最近在肝空间数据库的课设,在照着老师给的教程学Oracle的起步阶段就被气到了,编程三年了,第一次碰到引号的格式错误,直接浪费我两小时(=。=)
首先直观展示一下两种引号的区别,其实看起来还是挺明显的:
’LONGITUDE’
'LONGITUDE'
话不多说,开始正题~
弯引号的报错
众所周知,老师的实验教程肯定是保存在word里面,方便我们嫖代码(老师有心了hhh)。下面是教程中的一段代码,目的是向空间元数据表插入记录(为了方便查错写得比较松散,请见谅):
1 INSERT INTO USER_SDO_GEOM_METADATA VALUES
2 (
3 ’SPATIALTEST’,
4 ’LOC’,
5 SDO_DIM_ARRAY
6 (
7 SDO_DIM_ELEMENT
8 (
9 ’Longitude’,
10 -180,
11 180,
12 10
13 ),
14 SDO_DIM_ELEMENT
15 (’Latitude’,
16 -90,
17 90,
18 10
19 )
20 ),
21 8307
22 ) ;
然后当我在SQL Plus里面运行它时,会报这样的错误:
’SPATIALTEST’,
*
第 3 行出现错误:
ORA-00911: 无效字符
这是为什么呢?本人愚钝,上网查了两个小时,才大概明白了是怎么回事儿,下面看我细细道来~
直引号与弯引号的区别
首先附上找到的参考网页:引号字符种种
简单来说,直引号源于早期计算机字符系统对书写规则的简化,由于目前计算机性能大幅提高,官方上基本不再使用了;但是程序员们因为直引号节约空间的优点和一直以来的习惯的影响,仍旧坚持使用直引号。可能许多编程语言都考虑到了这个问题,对直引号、弯引号都予以识别,但很遗憾,Oracle 11g并没有这种功能。在用于桌面出版的编辑器中,弯引号以及斜引号才足够清晰规范,所以office会默认将直引号替换为弯引号。
这时我出错的原因已经明了:word自动把老师代码中的直引号转为了弯引号,然后我把它直接复制到SQL Plus里,芜湖,完蛋!
如何打出直引号?
据本人鉴定,在命令行中的英文引号默认是直引号,大家大可放心。
在Word里面就比较麻烦了,需要更改一下默认设置,具体操作步骤参考:word中的单引号问题
或者最简单粗暴的方法,找到一个直引号,复制粘贴,可以救急。
改成直引号之后代码也成功运行了:
1 INSERT INTO USER_SDO_GEOM_METADATA VALUES
2 (
3 'SPATIALTEST',
4 'LOC',
5 SDO_DIM_ARRAY
6 (
7 SDO_DIM_ELEMENT
8 (
9 'Longitude',
10 -180,
11 180,
12 10
13 ),
14 SDO_DIM_ELEMENT
15 ('Latitude',
16 -90,
17 90,
18 10
19 )
20 ),
21 8307
22 ) ;
已创建 1 行。
另附:查资料时发现的一些有趣博客
(其实是解决这个问题的时候资料查歪了哈哈哈)
Oracle中的单引号和双引号
ORA-00904无效标示 ‘列’的解决方法
大概就是这样,我要继续去面向CSDN的编程了
本人水平一般,如有错误,欢迎讨论指正!