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
Oracle 11g中正确的更新语句是什么_Oracle_Oracle11g - Fatal编程技术网

Oracle 11g中正确的更新语句是什么

Oracle 11g中正确的更新语句是什么,oracle,oracle11g,Oracle,Oracle11g,我最初的update语句在Sybase中仍然运行良好(见下文),但我们正在迁移到Oracle 11g,我必须将此update语句转换为Oracle update。 我尝试了这么多版本,但不断出现错误,我想我还没有了解到Oracle Update语句是如何工作的。有人能帮忙吗 我的原始良好更新语句(在Sybase中): 以下是我的Oracle版本,无论我做了什么都无法运行: MERGE INTO um_valid Target USING (select * from um_valid)

我最初的update语句在Sybase中仍然运行良好(见下文),但我们正在迁移到Oracle 11g,我必须将此update语句转换为Oracle update。 我尝试了这么多版本,但不断出现错误,我想我还没有了解到Oracle Update语句是如何工作的。有人能帮忙吗

我的原始良好更新语句(在Sybase中):

以下是我的Oracle版本,无论我做了什么都无法运行:

MERGE
  INTO um_valid Target
  USING (select * from um_valid) SOURCE
  ON (t1.id_number = t2.id_number)                
  WHEN MATCHED THEN
  UPDATE
   SET status = 'X',
       reason = 'Missing (street 1)'
  WHERE Target.session_id = 69
  AND Target.userid = 'BS'
  AND Target.status = 'A' 
  AND NVL(SOURCE.street1, ' ') = ' ') 
我得到的错误是:
ORA-00933:SQL命令未正确结束

结尾的WHERE子句不合适。也许你需要这个:

MERGE
   INTO um_valid Target
   USING (
      select distinct id_number 
      from um_valid 
      where street1 is null
   ) SOURCE
   ON (
      Target.id_number = SOURCE.id_number
      AND Target.session_id = 69
      AND Target.userid = 'BS'
      AND Target.status = 'A' 
   )                
   WHEN MATCHED THEN UPDATE SET 
      status = 'X',
      reason = 'Missing (street 1)'

您可以使用普通的update语句。合并用于批量操作。 如果需要在某个对象存在时进行更新,或者在该对象不存在时进行插入,那么可以使用merge语句。 因此,对于您的示例,请尝试使用以下方法:

UPDATE Valid
SET status = 'X',
    reason = 'Missing'
WHERE session_id = 69
AND userid = 'BS'
AND status = 'A' 
AND street1 is null
上面的语句将更新表“Valid”中的所有行,其中session_id等于69,userid等于BS,status等于A,street1为空(null)

我想这就是你需要的,如果不是这样,请让我知道你为什么加入valid和valid。我将调整我的更新。

这应该可以做到:

UPDATE Valid a
    SET status = 'X',
        reason = 'Missing'
  WHERE A.session_id = 69
  AND A.userid = 'BS'
  AND A.status = 'A' 
  AND exists (select null
              from   valid b
              where  a.id_number = b.id_number
                 AND coalesce(B.street1, ' ') = ' ')

我试过了,现在我得到了一个不同的错误:ORA-00904:“源”。“STREET1”:无效的标识符。列名是STREET1您确定它是STREET1吗?描述一下。它是用大写字母显示的吗?如果不是,则匹配大小写并用双引号括起来。示例:“street1”您可以从um_valid中选择street1吗?
UPDATE Valid a
    SET status = 'X',
        reason = 'Missing'
  WHERE A.session_id = 69
  AND A.userid = 'BS'
  AND A.status = 'A' 
  AND exists (select null
              from   valid b
              where  a.id_number = b.id_number
                 AND coalesce(B.street1, ' ') = ' ')