我创建了一个过程,我在其中使用合并查询。 当我编译程序时,没有错误,当我尝试执行它给我 低于错误。有人可以帮助解决这个问题。
代码:
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
答案 0 :(得分:4)
这与merge
无关,它实际上并没有实现您的程序。在create procedure
语句中,您有一个名为DEVICE
的架构。由于错误消息只是抱怨CHECK1
而不是DEVICE.CHECK1
,因此您似乎还有一个名为DEVICE
的包。您的匿名块正在尝试在该程序包中找到名为CHECK1
的过程,而不是在架构级别。
如果在执行此操作时以设备架构所有者(用户)身份连接,只需删除架构前缀:
BEGIN
CHECK1;
COMMIT;
END;
/