2009-08-24 89 views
5

我有以下代码:ORA-00933:SQL命令不能正确地结束

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给我的以下错误消息:

prod_name from dba_xy.product; 
         * 

ERROR位于第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列后,我改变了我的代码:

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; 

末; /

和以下错误消息上来关于唯一约束: ORA-00001:: 位于第1行开始 * ERROR唯一约束(DBA_XY.PROD_NAME_UC)违反 ORA-06512:在3线

回答

0

您是否因为插入相同的行两次而获得唯一的约束违规? “我”应该在插入语句的where子句中使用,还是您真的想要两次插入行?

你的第一条语句有两个FROM子句,这就是为什么你得到一个语法错误。

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;  
3

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

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; 

...当它应该是:

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。例如:

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 
+0

我试着运行你的视图代码,它想出了以下错误: join dba_xy。产品p * 错误在第5行: ORA-00905:缺少关键字 – taksIV 2009-08-24 03:23:26

+0

我不好 - 我忘了实际的JOIN标准。立即尝试查看代码。 – 2009-08-24 04:45:46

+0

哈哈,这很好。谢谢。 – taksIV 2009-08-24 05:30:03

相关问题