आपको केवल MERGE . की आवश्यकता है बयान। आपकी दोनों ज़रूरतें एक ही बार में पूरी की जा सकती हैं।
वाक्य रचना है -
MERGE INTO table_a a
USING table_b b
ON (a.column= b.column)
WHEN MATCHED THEN
UPDATE SET a.column= b.column
WHEN NOT MATCHED THEN
INSERT (column1, column2)
VALUES (b.val1, b.val2);
अपडेट करें प्रक्रिया पैरामीटर के लिए उपयोग क्लॉज दिखाने के लिए उदाहरण
USING(
SELECT
p_HEAD_MARK hm,
p_PROJECT_NAME pn,
p_COLI_NUM cn,
p_ONSITE_UPD_QTY ouq
FROM DUAL) s
इनका उपयोग s.hm, s.pn, s.cn, s.ouq
के रूप में करें
अपडेट 2 एक पूर्ण परीक्षण मामला
मान लें कि मेरे पास एक टेबल है emp1
बिना पंक्तियों के। मैं एक प्रक्रिया बनाता हूं जो ename
. लेता है INPUT के रूप में, जिसका उपयोग मैं emp
. में डालने के लिए करूंगा MERGE . का उपयोग कर तालिका ।
SQL> SELECT * FROM emp1;
no rows selected
SQL>
SQL> CREATE OR REPLACE
2 PROCEDURE p(
3 p_ename IN VARCHAR2)
4 AS
5 BEGIN
6 MERGE INTO emp1 e USING
7 (SELECT p_ename AS ename FROM dual
8 ) s ON(e.ename = s.ename)
9 WHEN MATCHED THEN
10 UPDATE SET e.empno = 100 WHEN NOT MATCHED THEN
11 INSERT
12 (ename
13 ) VALUES
14 (s.ename
15 );
16 END;
17 /
Procedure created.
SQL>
SQL> sho err
No errors.
SQL>
SQL> BEGIN
2 p('SCOTT');
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
देखते हैं कि मान डाला गया है या नहीं।
SQL> SELECT ename FROM emp1;
ENAME
----------
SCOTT
SQL>