首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ora-00933:SQL命令未正确结束

ora-00933:SQL命令未正确结束
EN

Stack Overflow用户
提问于 2009-08-24 00:38:44
回答 2查看 50K关注 0票数 5

我有以下代码:

代码语言:javascript
复制
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
      dbms_random.string('U',5),
      trunc(dbms_random.value(0000,9999)),
      prod_id from dba_xy.product 
              prod_name from dba_xy.product;        
end loop;

结束;

当我运行它时,oracle给我以下错误消息:

代码语言:javascript
复制
prod_name from dba_xy.product;
                        *

第8行错误: ORA-06550:第8行,第29列: PL/ SQL : ORA-00933: SQL命令未正确结束ORA-06550:第3行,第2列:已忽略PL/SQL: SQL语句

我要做的是将现有的prod_id和prod_name与插入到调度表中的新数据链接起来。我将prod_name设置为产品表中的唯一键,将prod_id设置为主键,并将两者都设置为分派表中的外键约束。我需要将prod_name包含到调度表中,以便让表的读者更好地了解需要查找的prod_name等内容,而不是仅仅给出对他们毫无意义的prod_id。但也许我在想,我不需要在调度表中使用prod_id。请帮帮忙。

从分发表中删除prod_id列后,我更改了代码:

代码语言:javascript
复制
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
      dbms_random.string('U',5),
      trunc(dbms_random.value(0000,9999)),
              prod_name from dba_xy.product;        
end loop;

结束;/

出现以下关于unique约束的错误消息: begin * error在第1行: ORA-00001: unique约束(DBA_XY.PROD_NAME_UC)违反ORA-06512:在第3行

EN

回答 2

Stack Overflow用户

发布于 2009-08-24 02:45:20

您的ORA-00933错误是由于SELECT语句的格式不正确造成的:

代码语言:javascript
复制
SELECT desp_id_seq.nextval,
       dbms_random.string('U',5),
       TRUNC(dbms_random.value(0000,9999)),
       prod_id from dba_xy.product 
       prod_name from dba_xy.product; 

...when应该是:

代码语言:javascript
复制
SELECT DESP_ID_SEQ.nextval,
       DBMS_RANDOM.string('U',5),
       TRUNC(DBMS_RANDOM.value(0000,9999)),
       t.prod_id,
       t.prod_name 
  FROM dba_xy.product t; 

您缺少用于分隔prod_idprod_name列的逗号,而且在错误的位置还有一个冗余的FROM dba_xy.product声明。

也就是说,dba_xy.despatch表应该只包含prod_id。如果您需要提供数据的人类可读版本,我建议您构造一个view。示例:

代码语言:javascript
复制
CREATE VIEW despatch_vw AS
SELECT t.prod_id,
       p.prod_name
  FROM dba_xy.despatch t
  JOIN dba_xy.product p ON p.prod_id = t.prod_id
票数 3
EN

Stack Overflow用户

发布于 2009-08-24 01:47:26

会不会因为插入了两次相同的行而违反了唯一约束?应该在insert语句的where子句中使用"i“,还是真的希望插入两次行?

第一条语句有两个FROM子句,这就是出现语法错误的原因。

代码语言:javascript
复制
select desp_id_seq.nextval,
          dbms_random.string('U',5),
          trunc(dbms_random.value(0000,9999)),
          prod_id, --from dba_xy.product
              prod_name from dba_xy.product;    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1319992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档