我有一个关于比较两个表的问题,更新它的值并增加rev no value。
首先,我的表结构就像这样
主绘图表, HEAD_MARK重量表面
虚拟大师绘图表, HEAD_MARK_DUM WEIGHT_DUM SURFACE DUM
我有一个函数来将dummy_master_drawing和master_drawing的值同步
CREATE OR REPLACE FUNCTION WELTESADMIN.DUM_MST_SYNC(PROJNAME IN VARCHAR2)
RETURN NUMBER IS NUM_ROWS NUMBER;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
MERGE INTO MASTER_DRAWING DST USING
(SELECT WEIGHT_DUM, SURFACE_DUM, HEAD_MARK_DUM, PROJECT_NAME_DUM FROM DUMMY_MASTER_DRAWING) SRC
ON (DST.HEAD_MARK = SRC.HEAD_MARK_DUM)
WHEN MATCHED THEN
UPDATE SET DST.WEIGHT = SRC.WEIGHT_DUM,
DST.SURFACE = SRC.SURFACE_DUM
WHERE DST.PROJECT_NAME = SRC.PROJECT_NAME_DUM
AND DST.PROJECT_NAME = PROJNAME;
NUM_ROWS := SQL%ROWCOUNT;
COMMIT;
RETURN NUM_ROWS;
END;
我有第二个SQL来比较不同的数据值,
Select A.HEAD_MARK, A.WEIGHT MDWEIGHT, B.WEIGHT_DUM DUMWEIGHT,
A.SURFACE SURFACE, B.SURFACE_DUM
From MASTER_DRAWING A, DUMMY_MASTER_DRAWING B
Where A.HEAD_MARK = B.HEAD_MARK_DUM AND A.WEIGHT != B.WEIGHT_DUM AND A.SURFACE != B.SURFACE_DUM
AND A.PROJECT_NAME = B.PROJECT_NAME_DUM AND A.PROJECT_NAME = PROJNAME
问题是我不知道如何将这2个查询集成到单个函数中。在WELTESADMIN.DUM_MST_SYNC函数中使用IF语句或将第二个放在函数中并将这两个函数放在一个过程中是否更好?
或者让它们成为一个程序并在函数内执行它们两个?
请帮帮我, 我刚刚开始学习oracle,我想在这些方面做得很好。
提前致谢
答案 0 :(得分:0)
不,您不应该将第二个SQL放在函数或过程中。不要将PL / SQL用于这种简单的任务。由于PL / SQL有上下文切换的开销,SQL总是会更快。
话虽如此,您的第二个查询可以是MERGE
语句本身的一部分。这只是一个WHEN NOT MATCHED
条件。你想用不匹配的行做什么?我相信,这个问题是你昨天的问题的延伸。
在高级别,您的要求是:
insert
或delete
这些行。这只不过是在同一个合并声明中添加插入/删除。