问题描述
嗨,团队,
最近,我们在生产系统中遇到了一个错误 (这是我们的编码错误!),但是在调查相同的内容时,我注意到了这一点。
执行以下操作:
1) 表创建:
2) SQL插入:
3) PL/SQL插入:
当我在11g和12c中运行上述SQL和PL/SQL插入时收到的错误代码如下:
我们得到的错误在12c版本的SQL和PL/SQL中是统一的,但我个人认为11g SQL错误更有意义,有助于确定错误的根本原因。
请告诉我你的观点。
最近,我们在生产系统中遇到了一个错误 (这是我们的编码错误!),但是在调查相同的内容时,我注意到了这一点。
执行以下操作:
1) 表创建:
create table dept( dept_no varchar2(15), dept_name varchar2(30), loc varchar2(30));
2) SQL插入:
insert into dept values ('10','president's','washington d.c');
3) PL/SQL插入:
DECLARE
l_sql VARCHAR2(32767);
BEGIN
l_sql := 'INSERT INTO DEPT VALUES (';
L_sql := l_sql || '''50''';
l_sql := l_sql ||', ''president''s'', ''washington d.c'')';
dbms_output.put_line(l_sql);
EXECUTE IMMEDIATE l_sql;
END;
当我在11g和12c中运行上述SQL和PL/SQL插入时收到的错误代码如下:
Version - 12c
SQL Error - ORA-00917: missing comma
PL/SQL Error - ORA-00917: missing comma ORA-06512: at line 8
ORA-06512: at "SYS.DBMS_SQL", line 1721
Version - 11g
SQL Error - ORA-01756: quoted string not properly terminated
PL/SQL Error - ORA-00917: missing comma ORA-06512: at line 8
我们得到的错误在12c版本的SQL和PL/SQL中是统一的,但我个人认为11g SQL错误更有意义,有助于确定错误的根本原因。
请告诉我你的观点。
专家解答
我同意如果PL/SQL消息与SQL消息匹配会很好,但是很抱歉,我无法重现您提到的11g和12c之间的差异。
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition 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 64-bit Windows: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
5 rows selected.
SQL>
SQL> create table dept(
2 dept_no varchar2(15),
3 dept_name varchar2(30),
4 loc varchar2(30));
Table created.
SQL>
SQL> insert into dept values ('10','president's','washington d.c');
ERROR:
ORA-01756: quoted string not properly terminated
SQL>
SQL> declare
2 l_sql varchar2(32767);
3 begin
4 l_sql := q'{insert into dept values ('10','president's','washington d.c')}';
5 execute immediate l_sql;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-00917: missing comma
ORA-06512: at line 5
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE 12.2.0.1.0 Production
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
5 rows selected.
SQL>
SQL> create table dept(
2 dept_no varchar2(15),
3 dept_name varchar2(30),
4 loc varchar2(30));
Table created.
SQL>
SQL> insert into dept values ('10','president's','washington d.c');
ERROR:
ORA-01756: quoted string not properly terminated
SQL>
SQL> declare
2 l_sql varchar2(32767);
3 begin
4 l_sql := q'{insert into dept values ('10','president's','washington d.c')}';
5 execute immediate l_sql;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-00917: missing comma
ORA-06512: at line 5
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




