sql >> Database >  >> RDS >> Oracle

Oracle-functie om een ​​tabel bij te werken, als de record null is, dan INSERT

Alles wat je nodig hebt is MERGE uitspraak. Aan beide vereisten kan in één keer worden voldaan.

De syntaxis is -

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);

Bijwerken Voorbeeld om de clausule USING voor procedureparameters weer te geven

USING(
SELECT
p_HEAD_MARK hm, 
p_PROJECT_NAME pn, 
p_COLI_NUM cn, 
p_ONSITE_UPD_QTY ouq
FROM DUAL) s

Gebruik deze als s.hm, s.pn, s.cn, s.ouq

Update 2 Een complete testcase

Laten we zeggen dat ik een tabel emp1 . heb zonder rijen. Ik maak een procedure die ename . nodig heeft als INPUT, die ik zal gebruiken om in te voegen in emp tabel met 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>

Laten we kijken of de waarde is ingevoegd.

SQL> SELECT ename FROM emp1;

ENAME
----------
SCOTT

SQL>



  1. maand() functie en jaar() functie in postgresql via jpa2

  2. Wat is de beste manier om de SQL Server-verbinding programmatisch te testen?

  3. Als mysql_num_rows gelijk is aan NUL werkt NIET

  4. Beschikbare gebruikers op een bepaalde datum weergeven