sql >> Databáze >  >> RDS >> Oracle

Jak použít %ROWTYPE při vkládání do tabulky Oracle se sloupcem identity?

Jediná věc, která mě napadá, protože jste na 12c, je udělat sloupec identity INVISIBLE , jako je kód níže.

Problém je v tom, že získává %ROWTYPE s ID je trochu obtížnější, ale je to proveditelné.

Samozřejmě to může také zmást ostatní uživatele vaší tabulky, že nevidí primární klíč!

Nemyslím si, že bych to udělal, ale je odpověď na vaši otázku, co to stojí za to.

DROP TABLE t;

CREATE TABLE t ( id number invisible generated always as identity, 
                 val varchar2(30));

insert into t (val) values ('A');                 

DECLARE

  record_without_id t%rowtype;
  CURSOR c_with_id IS SELECT t.id, t.* FROM t;
  record_with_id c_with_id%rowtype;

BEGIN
  record_without_id.val := 'C';
  INSERT INTO t VALUES record_without_id;

  -- If you want ID, you must select it explicitly
  SELECT id, t.* INTO record_with_id FROM t WHERE rownum = 1;

  DBMS_OUTPUT.PUT_LINE(record_with_id.id || ', ' || record_with_id.val);
END;
/

SELECT id, val FROM t;    


  1. Statické a dynamické maskování dat v FieldShield

  2. MySQL:Curdate() vs Now()

  3. Chyba mysql node.js:ECONNREFUSED

  4. Jakýkoli příkaz v mysql ekvivalentní k automatickému sledování Oracle pro soustružení výkonu