Sql 在游标中使用Insert语句中的where子句

Sql 在游标中使用Insert语句中的where子句,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,我正在运行此代码,并收到此错误ORA-00933 SQL命令未正确结束 如何编写此代码以使此错误不存在?要删除的成员地址是一个光标 FOR curr_element IN member_addresses_to_remove LOOP INSERT INTO schema.tablename(ID,NAME, PHONE_NUMBER) VALUES (curr_element.ID, curr_element.NAME,curr_element.PHONE_NUMBER

我正在运行此代码,并收到此错误
ORA-00933 SQL命令未正确结束

如何编写此代码以使此错误不存在?要删除的成员地址是一个
光标

 FOR curr_element IN member_addresses_to_remove 
  LOOP
    INSERT INTO schema.tablename(ID,NAME, PHONE_NUMBER)
    VALUES (curr_element.ID, curr_element.NAME,curr_element.PHONE_NUMBER)
    WHERE NOT EXISTS (SELECT 1
                      FROM SCHEMA.OTHERTABLE OT
                      WHERE OT.ID = curr_element.ID);                        
  END LOOP;
COMMIT;

Insert语句语法错误,请检查下面的示例

INSERT INTO trg_tbl (col1, col2, col3)
SELECT col1,
       col2,
       col3
FROM src_tbl
WHERE col4 = myvale;

通过在SQLPlus中执行单个SQL语句来测试SQL,然后添加它过程插入语句语法错误,请检查下面的示例

INSERT INTO trg_tbl (col1, col2, col3)
SELECT col1,
       col2,
       col3
FROM src_tbl
WHERE col4 = myvale;

通过在SQLPlus中执行单个SQL语句来测试SQL,然后添加它过程

您的语法不正确,因为您将
子句与
where
子句组合在一起

试试这个:

 FOR curr_element IN member_addresses_to_remove 
  LOOP
    INSERT INTO schema.tablename(ID,NAME, PHONE_NUMBER)
    SELECT curr_element.ID, curr_element.NAME,curr_element.PHONE_NUMBER
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1
                      FROM SCHEMA.OTHERTABLE OT
                      WHERE OT.ID = curr_element.ID);                        
  END LOOP;
COMMIT;

您的语法不正确,因为您将
values
子句与
where
子句组合在一起

试试这个:

 FOR curr_element IN member_addresses_to_remove 
  LOOP
    INSERT INTO schema.tablename(ID,NAME, PHONE_NUMBER)
    SELECT curr_element.ID, curr_element.NAME,curr_element.PHONE_NUMBER
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1
                      FROM SCHEMA.OTHERTABLE OT
                      WHERE OT.ID = curr_element.ID);                        
  END LOOP;
COMMIT;


更改从dual…选择[您的列]的值。。。。它应该可以工作,也许你只是忘记了删除INSERT语句中的WHERE条件,请检查以下链接:@JorgeCampos我这样做了,现在它说ORA-00907缺少正确的参数。我有所有的毕业论文。这是你熟悉的东西吗?又为什么要从双重工作?它在那里做什么?我想你没有把括号从列中去掉吧?我不够清楚,我想说的是选择不带括号的列……)更改从dual…选择[您的列]的值。。。。它应该可以工作,也许你只是忘记了删除INSERT语句中的WHERE条件,请检查以下链接:@JorgeCampos我这样做了,现在它说ORA-00907缺少正确的参数。我有所有的毕业论文。这是你熟悉的东西吗?又为什么要从双重工作?它在那里做什么?我想你没有把括号从列中去掉吧?我不够清楚,我想说的是选择不带括号的列……)我试图用where子句从游标插入数据,并查看另一个表中是否存在一个值。如果是这样的话,我就不想插入那个数据了。嗨,好的,我知道了。但我认为您可以在一条SQL语句中完成这一切,而无需使用游标。我正在尝试使用where子句从游标插入数据,并查看另一个表中是否存在一个值。如果是这样的话,我就不想插入那个数据了。嗨,好的,我知道了。但我认为您可以在一条SQL语句中完成所有操作,而无需使用游标。您根本不可能需要这个循环。您可能只在语句中写入一个INSERT,而不使用游标。但是您还没有展示该代码,这应该可以解决您当前的问题。谢谢!这很有效。你能给我解释一下为什么双轨制有效吗?如何从游标中的当前元素中获取数据?关于dual:不能在values子句之后放置任何内容,因此需要一个表来选择。Dual有一行。你好@WW。正如您已经评论过的,我还将在您的答案中添加insert select语句,以便OP可以选择正确的方法:)+1无论如何,您不太可能需要这个循环。您可能只在语句中写入一个INSERT,而不使用游标。但是您还没有展示该代码,这应该可以解决您当前的问题。谢谢!这很有效。你能给我解释一下为什么双轨制有效吗?如何从游标中的当前元素中获取数据?关于dual:不能在values子句之后放置任何内容,因此需要一个表来选择。Dual有一行。你好@WW。正如您已经评论的那样,我还将在您的答案中添加insert select语句,以便OP可以选择正确的方法:)+1