Oracle Pl / Sql过程帮助合并

时间:2015-01-16 12:02:39

标签: oracle plsql

我创建了一个过程,我在其中使用合并查询。   当我编译程序时,没有错误,当我尝试执行它给我  低于错误。有人可以帮助解决这个问题。

代码:

    CREATE OR REPLACE PROCEDURE DEVICE.Check1
    IS
    BEGIN
    MERGE INTO DEVICE.APP_C_CATEGORY A
        USING (SELECT market_segment_id,
                      market_segment_name,
                      UPDATE_USER,
                      UPDATE_DATE
                 FROM CUST_INTEL.MSE_MARKET_SEGMENT_MASTER@SOURCE_CUST_INTEL.ITG.TI.COM
                WHERE market_segment_id NOT IN ('120', '130', '100')) B
           ON (A.APP_CATEGORY_ID = B.market_segment_id
               AND A.APP_CATEGORY_NAME = B.market_segment_name)
    WHEN MATCHED
    THEN
      UPDATE SET A.DESCRIPTION = B.market_segment_name,
                 A.PARENT_APP_AREA_ID = NULL,
                 A.RECORD_CHANGED_BY = B.UPDATE_USER,
                 A.RECORD_CHANGE_DATE = B.UPDATE_DATE
    WHEN NOT MATCHED
    THEN
      INSERT     (A.APP_CATEGORY_NAME,
                  A.DESCRIPTION,
                  A.TYPE,
                  A.PARENT_APP_AREA_ID,
                  A.RECORD_CHANGED_BY,
                  A.RECORD_CHANGE_DATE)
          VALUES (B.market_segment_name,
                  B.market_segment_name,
                  1,
                  NULL,
                  B.UPDATE_USER,
                  B.UPDATE_DATE);

    COMMIT;
    EXCEPTION
    WHEN OTHERS
    THEN
      ROLLBACK;
      DBMS_OUTPUT.PUT_LINE (SQLERRM);
      DBMS_OUTPUT.PUT_LINE (SQLCODE);
    END;
    /

错误:我正在执行

    BEGIN 
    DEVICE.CHECK1;
    COMMIT; 
    END;

发生以下错误:

ORA-06550: line 2, column 10:
PLS-00302: component 'CHECK1' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored

1 个答案:

答案 0 :(得分:4)

这与merge无关,它实际上并没有实现您的程序。在create procedure语句中,您有一个名为DEVICE的架构。由于错误消息只是抱怨CHECK1而不是DEVICE.CHECK1,因此您似乎还有一个名为DEVICE的包。您的匿名块正在尝试在该程序包中找到名为CHECK1的过程,而不是在架构级别。

如果在执行此操作时以设备架构所有者(用户)身份连接,只需删除架构前缀:

BEGIN 
  CHECK1;
  COMMIT; 
END;
/