我有以下代码:
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;
*
第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。但是也许我在想,我不需要在 dispatch 表中使用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;
结尾;
/
并且出现以下有关唯一约束的错误消息:
开始
*
第1行发生错误:
ORA-00001:唯一约束(DBA_XY.PROD_NAME_UC)被违反
ORA-06512:在第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_id
和prod_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
关于sql - ora-00933:SQL命令未正确结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1319992/