Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ora-00933:SQL命令未正确结束_Sql_Oracle_Plsql_Ora 00933_Ora 00001 - Fatal编程技术网

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

ora-00933:SQL命令未正确结束,sql,oracle,plsql,ora-00933,ora-00001,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;

我有以下代码:

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与插入到Dispatch表中的新数据链接起来。我已将prod_name设置为产品表中的唯一键,将prod_id设置为主键,并已将两者设置为Dispatch表中的外键约束。我需要将prod_名称包含到Dispatch表中,以便表的读者能够更好地了解需要查找的prod_名称等,而不仅仅是提供prod_id,这对他们来说毫无意义。但也许我在想,我不需要发送表中的prod_id。 请帮忙

从Dispatch表中删除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行

中,是否会因为插入相同的行两次而导致唯一约束冲突?是应该在insert语句的where子句中使用“i”,还是确实要将行插入两次

您的第一个语句有两个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;    

您的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
列的逗号,并且在错误的位置有一个来自dba_xy.product的冗余声明

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

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

我尝试运行您的视图代码,结果出现以下错误:第5行的join dba_xy.product p*错误:ORA-00905:缺少关键字my bad-我忘记了实际的连接条件。现在尝试查看代码。