字符串字面量是指在表达式、条件语句、SQL函数,SQL语句中字符串的表示。一般情况下字符串是从一个单引号开始到一个单引号结束,但存在一些特殊情况,比如字符串本身含有单引号,这会让数据库误以为应该结束字符串而导致错误,或含有一些其他特殊字符。下面简单介绍Oracle数据库中字符串字面量如何正确表示来解决上面的问题。
使用单引号'
开头和结尾,中间部分为字符串。下面是例子
'Hello'
'ORACLE.dbs'
'Jackie''s raincoat'
'09-MAR-98'
如果字符串中出现单引号,则使用两个连续的单引号将第二个单引号转义。例如'I''m a teacher.'
使用q
或者Q
+单引号'
+一个开始引用定义字符开头,以结束引用定义字符+单引号结尾,则在其中的部分都视作一个字符串。引用定义字符不能为空格、tab和回车。如果开始转义字符为括号类字符的左部分((
、[
、{
、<
),则结束转义字符必须为相匹配的括号右半部分()
、]
、}
、>
)。其他情况结束转义字符和开始转义字符相同。
例如
q'!name LIKE '%DBMS_%%'!'
q'<'So,' she said, 'It's finished.'>'
q'{SELECT * FROM employees WHERE last_name = 'Smith';}'
nq'ï Ÿ1234 ï'
q'"name like '['"'
使用这种形式作为插入语句的字面量例子
-- 使用!作为引用定义字符 INSERT INTO t2(name) VALUES (q'!name LIKE '%DBMS_%%'!') -- 使用<作为引用定义字符 INSERT INTO t2(name) VALUES (q'<'So,' she said, 'It's finished.'>') -- 使用{作为开始引用定义字符,结束引用定义字符应该为对应的} INSERT INTO t2(name) VALUES (q'{SELECT * FROM employees WHERE last_name = 'Smith';}') -- 使用特殊字符ï作为引用定义字符 INSERT INTO t2(name) VALUES (q'ï Ÿ1234 ï') -- 使用双引号"作为引用定义字符 INSERT INTO t2(name) VALUES (q'"name like '['"') -- 也可使用单引号'作为引用定义字符,但会导致可读性下降 INSERT INTO t2(name) VALUES (q'''OK', she said.'')
对应的插入结果
参考资料:Oracle 11g sql reference