Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

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
Sql ORA-00971:缺少集合关键字_Sql_Oracle_Join_Sql Update - Fatal编程技术网

Sql ORA-00971:缺少集合关键字

Sql ORA-00971:缺少集合关键字,sql,oracle,join,sql-update,Sql,Oracle,Join,Sql Update,尝试运行此简单的UPDATE语句时,我遇到了一个令人困惑的“ORA97100缺少SET关键字””错误 UPDATE (SELECT RKAP_PROYEKSI.ID AS ID, RKAP_PROYEKSI.TAHUN AS TAHUN, RKAP_PROYEKSI.KODE_ANGGARAN AS KODE_ANGGARAN, RKAP_PROYEKSI.JENIS_BIAYA AS JENIS_BIAYA, RKAP_P

尝试运行此简单的UPDATE语句时,我遇到了一个令人困惑的“ORA97100缺少SET关键字””错误

UPDATE 

    (SELECT
      RKAP_PROYEKSI.ID AS ID,
      RKAP_PROYEKSI.TAHUN AS TAHUN,
      RKAP_PROYEKSI.KODE_ANGGARAN AS KODE_ANGGARAN,
      RKAP_PROYEKSI.JENIS_BIAYA AS JENIS_BIAYA,
      RKAP_PROYEKSI.SUBTOTAL AS SUBTOTAL,
      RKAP_PROYEKSI.TOTAL AS TOTAL,
      RKAP_PROYEKSI.BELONGS_TO AS BELONGS_TO,
      RKAP_PROYEKSI.NOMOR AS NOMOR,
      RKAP_PROYEKSI.STATUS AS STATUS
  FROM WOS.RKAP_PROYEKSI
  LEFT JOIN WOS.RKAP_MASTER_KODE ON RKAP_MASTER_KODE.ID_KODE = RKAP_PROYEKSI.KODE_ANGGARAN
  LEFT JOIN WOS.RKAP_USER ON RKAP_USER.BIRO = RKAP_MASTER_KODE.BIRO
  WHERE TAHUN = '2018' AND RKAP_MASTER_KODE.BIRO = 'BSI') AS helper

  SET helper.STATUS = 0
我也尝试过删除“AS”,但仍然出错

任何经过深思熟虑的建议都将不胜感激


谢谢

我想你可以这样说:

UPDATE WOS.RKAP_PROYEKSI p
    SET STATUS = 0
    WHERE p.TAHUN = '2018' AND
          EXISTS (SELECT 1
                  FROM WOS.RKAP_MASTER_KODE mk JOIN
                       WOS.RKAP_USER u
                       ON u.BIRO = mk.BIRO
                  WHERE mk.ID_KODE = p.KODE_ANGGARAN AND
                        mk.BIRO = 'BSI'
                 );

我看不出RKAP\U用户用于什么,但我把它留在了查询中,以防万一。

我想你可以这样说:

UPDATE WOS.RKAP_PROYEKSI p
    SET STATUS = 0
    WHERE p.TAHUN = '2018' AND
          EXISTS (SELECT 1
                  FROM WOS.RKAP_MASTER_KODE mk JOIN
                       WOS.RKAP_USER u
                       ON u.BIRO = mk.BIRO
                  WHERE mk.ID_KODE = p.KODE_ANGGARAN AND
                        mk.BIRO = 'BSI'
                 );

我看不出RKAP\U USER用于什么,但我把它留在了查询中,以防万一。

您可以使用
和..AS
子句:

UPDATE RKAP_PROYEKSI R
   SET STATUS = ( 
WITH RP AS
(
SELECT
      RKAP_PROYEKSI.ID AS ID,
      RKAP_PROYEKSI.TAHUN AS TAHUN,
      RKAP_PROYEKSI.KODE_ANGGARAN AS KODE_ANGGARAN,
      RKAP_PROYEKSI.JENIS_BIAYA AS JENIS_BIAYA,
      RKAP_PROYEKSI.SUBTOTAL AS SUBTOTAL,
      RKAP_PROYEKSI.TOTAL AS TOTAL,
      RKAP_PROYEKSI.BELONGS_TO AS BELONGS_TO,
      RKAP_PROYEKSI.NOMOR AS NOMOR,
      RKAP_PROYEKSI.STATUS AS STATUS,
      0 AS ZERO_STATUS
 FROM WOS.RKAP_PROYEKSI
 LEFT JOIN WOS.RKAP_MASTER_KODE ON RKAP_MASTER_KODE.ID_KODE = RKAP_PROYEKSI.KODE_ANGGARAN
 LEFT JOIN WOS.RKAP_USER ON RKAP_USER.BIRO = RKAP_MASTER_KODE.BIRO
WHERE TAHUN = '2018' AND RKAP_MASTER_KODE.BIRO = 'BSI')
SELECT RP.ZERO_STATUS
  FROM RP
 WHERE RP.ID = R.ID
)

您可以将
与..AS
子句一起使用:

UPDATE RKAP_PROYEKSI R
   SET STATUS = ( 
WITH RP AS
(
SELECT
      RKAP_PROYEKSI.ID AS ID,
      RKAP_PROYEKSI.TAHUN AS TAHUN,
      RKAP_PROYEKSI.KODE_ANGGARAN AS KODE_ANGGARAN,
      RKAP_PROYEKSI.JENIS_BIAYA AS JENIS_BIAYA,
      RKAP_PROYEKSI.SUBTOTAL AS SUBTOTAL,
      RKAP_PROYEKSI.TOTAL AS TOTAL,
      RKAP_PROYEKSI.BELONGS_TO AS BELONGS_TO,
      RKAP_PROYEKSI.NOMOR AS NOMOR,
      RKAP_PROYEKSI.STATUS AS STATUS,
      0 AS ZERO_STATUS
 FROM WOS.RKAP_PROYEKSI
 LEFT JOIN WOS.RKAP_MASTER_KODE ON RKAP_MASTER_KODE.ID_KODE = RKAP_PROYEKSI.KODE_ANGGARAN
 LEFT JOIN WOS.RKAP_USER ON RKAP_USER.BIRO = RKAP_MASTER_KODE.BIRO
WHERE TAHUN = '2018' AND RKAP_MASTER_KODE.BIRO = 'BSI')
SELECT RP.ZERO_STATUS
  FROM RP
 WHERE RP.ID = R.ID
)

我认为oracle中的join in update不起作用,您需要MERGE语句。我不确定oracle的所有版本是否都支持此语法。如果没有
as
(oracle不支持表别名的
as
关键字,只支持列别名)。当我删除该语句时,我得到了一个ORA-00942:表或视图不存在,因为我没有您的模式。我认为oracle中的join in update不起作用,您需要MERGE语句。我不确定oracle的所有版本是否都支持此语法。如果没有
as
(oracle不支持表别名的
as
关键字,只支持列别名)。当我删除该语法时,我得到了一个ORA-00942:表或视图不存在,因为我没有您的模式。我仍然对“选择1”感到困惑,怎么能做到这一点@戈登Linoff@aldi . . . <代码>存在只检查行的存在。选择什么并不重要<代码>1很容易键入。我仍然对“选择1”感到困惑,怎么才能做到这一点@戈登Linoff@aldi . . . <代码>存在只检查行的存在。选择什么并不重要<代码>1很容易键入。这看起来有点笨拙。可能在
集合
之外运行CTE?这看起来有点尴尬。可能在
集合
之外运行CTE?