在 Oracle 中使用引号运算符插入分号
Posted
技术标签:
【中文标题】在 Oracle 中使用引号运算符插入分号【英文标题】:Using the quote operator in Oracle to insert a semi-colon 【发布时间】:2017-10-20 01:32:00 【问题描述】:我有以下 SQL 用于更新现有表中的 CSS,
SET DEFINE OFF;
UPDATE SCHEMANAME.template
SET body = q'[
<style type="text/css">
#header
background-color:#004F5D;
height:100px;
position:relative;
]'
WHERE name = 'CSS';
模板表的结构如下,
NAME NOT NULL VARCHAR2(150)
SUBJECT NOT NULL VARCHAR2(4000)
BODY NOT NULL CLOB
VERSION NUMBER(18)
但是,当我使用收到的 sqlplus 运行更新语句时,
ERROR:
ORA-01756: quoted string not properly terminated
SQL> SP2-0734: unknown command beginning "height:100..." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "position:r..." - rest of line ignored.
SQL> SP2-0042: unknown command "]'" - rest of line ignored.
我正在使用,
SQL*Plus: Release 11.2.0.4.0 Production
对于甲骨文,
Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
在我看来,好像 sqlplus 对标题块内第一个声明末尾的分号字符感到不安。
我尝试过发布,
SET ESCAPE OFF
在运行更新语句之前,问题仍然存在。
我可以通过将 UPDATE 包装在 BEGIN-END 块中来解决此问题。 这是完成这项工作的唯一方法吗?
quote-operator 是否有 ';' 的问题在一个街区内?
【问题讨论】:
(这与级联样式表有什么关系?这是一个 SQL 问题,无论文本是 CSS 还是克林贡语……标签css
已删除。)
只是在表格中插入 CSS,感谢您的编辑 CBroe..
引号运算符对分号没有问题。相反,这是一个特定于 SQL*Plus 的问题。行尾的分号会给它带来麻烦,即使它在带引号的字符串中(q 引号机制或标准单引号没有区别)。 Toad 和 SQL Developer 没有这样的问题。如果您必须使用 SQL*Plus,请尽量避免在末尾使用分号;或逃避它;或使用 CHR(...) 代替分号。等等(谷歌的问题,你会发现其他的想法。)
感谢 mathguy,这是有道理的,过去我们曾使用过 CHR 解决方法。如果您将此作为答案,我会接受。
@CBroe:您可能刚刚添加了 [klingon] 标签。 :-)
【参考方案1】:
它似乎将您的更新声明分成 4 个部分 -
UPDATE SCHEMANAME.template
SET body = q'[
<style type="text/css">
#header
background-color:#004F5D;
height:100px;
position:relative;
]'
你可以试试下面的查询
update SCHEMANAME.template
SET body = '"'||chr(13)||'<style type="text/css">'||chr(13)|| '#header '||chr(13)|| 'background-color:#004F5D;'||chr(13)|| 'height:100px;'||chr(13)|| 'position:relative;'||chr(13)|| '"'
WHERE name = 'CSS';
我使用 chr(13) 代替 quote ,换行。
【讨论】:
@mathguy 也提出了这个建议,并且成功了。我希望有一个“更好”的方法,但它看起来只是一个 SQLPlus 的东西。 @James ,正如 mathguy 建议的那样,您只需在更新字符串文字中单独使用 chr 作为分号。这也可以正常工作。以上是关于在 Oracle 中使用引号运算符插入分号的主要内容,如果未能解决你的问题,请参考以下文章