相关疑难解决方法(0)

ORA-30926:合并表时无法在源表中获取稳定的行集

我有这个合并声明:

MERGE INTO TB_DP_REGIAO B
USING TMP_DP_REGIAO P
ON (P.DS_PROTHEUS_CODE = B.DS_PROTHEUS_CODE)
WHEN MATCHED THEN UPDATE SET B.DS_PLANNING_CODE = CASE WHEN B.DT_LOAD < P.DT_LOAD THEN P.DS_PLANNING_CODE ELSE B.DS_PLANNING_CODE END,
                             B.DT_LOAD = CASE WHEN B.DT_LOAD < P.DT_LOAD THEN P.DT_LOAD ELSE B.DT_LOAD END
WHEN NOT MATCHED THEN INSERT(B.DS_PROTHEUS_CODE, B.DS_PLANNING_CODE, B.DT_LOAD) VALUES(P.DS_PROTHEUS_CODE, P.DS_PLANNING_CODE, P.DT_LOAD);
Run Code Online (Sandbox Code Playgroud)

那是给我这个错误:

Error starting at line 1 in command:
MERGE INTO TB_DP_REGIAO B
USING TMP_DP_REGIAO P
ON (P.DS_PROTHEUS_CODE = B.DS_PROTHEUS_CODE)
WHEN MATCHED THEN UPDATE SET B.DS_PLANNING_CODE = CASE WHEN B.DT_LOAD …
Run Code Online (Sandbox Code Playgroud)

sql oracle merge

5
推荐指数
1
解决办法
5万
查看次数

当源没有改变时,我们可以多次运行合并(Oracle)查询

我使用以下查询,

MERGE INTO table2 b
     USING (
         SELECT column1,column2,column3
         FROM table1
     ) a
     ON (a.column3 = 'UPDATE')
     WHEN NOT MATCHED THEN
         INSERT (b.column1, b.column2) VALUES (a.column1,a.column2)
     WHEN MATCHED THEN
         UPDATE SET a.column1 = b.column1,a.column2=b.column2;
Run Code Online (Sandbox Code Playgroud)

当table2为空时,它第一次成功运行.如果我第二次运行,即使table1数据没有改变,我得到的错误是unable to get a stable set of rows in the source tables..这是一个解决方法,这个错误.

正如在这个帖子中提到的,我试过把它Distinct但它没有解决..

我认为rowid应该在这里解决目的..但不确定

谢谢

sql oracle

2
推荐指数
1
解决办法
592
查看次数

oracle中使用Merge语句触发

下面的代码有什么问题,有人可以帮我解决吗?

CREATE OR REPLACE TRIGGER TEST_TRI
   AFTER INSERT
   ON TEST1
   FOR EACH ROW WHEN (NEW.COL2 >= '01-MAY-16')
BEGIN
   IF INSERTING
   THEN
        MERGE INTO  TEST_HIST HIST
        USING  TEST1 T1
        ON (T1.NEW.COL1=HIST.COL2)
        WHEN MATCHED THEN
    UPDATE SET 
        HIST.COL5=NEW.COL5
        WHEN NOT MATCHED
        THEN
      INSERT INTO 
           VALUES (:NEW.COL1,:NEW.COL2,:NEW.COL3,:NEW.COL4,:NEW.COL5);                 
   END IF;    
END;
/
Run Code Online (Sandbox Code Playgroud)

错误:错误(4,3):PL/SQL:忽略 Sql stmt 错误(12,14):PL/SQL:ORA-00926:缺少值关键字

感谢您的信息,我已经更改了如下代码并收到新错误。

CREATE OR REPLACE TRIGGER test_tri
   after INSERT
   ON test1
   FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')
   DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   IF INSERTING
   THEN
        MERGE INTO  test_hist hist …
Run Code Online (Sandbox Code Playgroud)

oracle oracle10g

1
推荐指数
1
解决办法
7612
查看次数

标签 统计

oracle ×3

sql ×2

merge ×1

oracle10g ×1