tak*_*sIV 5 sql oracle plsql ora-00933 ora-00001
我有以下代码:
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;
Run Code Online (Sandbox Code Playgroud)
结束;
当我运行它时,oracle给我以下错误消息:
prod_name from dba_xy.product;
*
Run Code Online (Sandbox Code Playgroud)
第8行的错误:ORA-06550:第8行,第29列:PL/SQL:ORA-00933:SQL命令未正确结束ORA-06550:第3行,第2列:PL/SQL:忽略SQL语句
我要做的是将现有的prod_id和prod_name与插入到发货表中的新数据相关联.我已将prod_name设置为product表中的唯一键,将prod_id设置为主键,并在despatch表中将两者都设置为外键约束.我需要将prod_name包含在despatch表中,以允许表的读者更多地了解需要找到的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;
Run Code Online (Sandbox Code Playgroud)
结束; /
并且出现以下关于唯一约束的错误消息:第1行的begin*ERROR:ORA-00001:违反ORA-06512的唯一约束(DBA_XY.PROD_NAME_UC):第3行
您是否会因为插入相同的行两次而违反唯一约束?“i”应该用在插入语句的 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;
Run Code Online (Sandbox Code Playgroud)