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

Sémantika uložených procedur / funkcí Oracle v transakčním kontextu

Můžete použít RESTRICT_REFERENCES k označení, že funkce nebude číst/zapisovat stav balíčku nebo databáze.

CREATE PACKAGE t_pkg AS
   FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2;
   PRAGMA RESTRICT_REFERENCES(showup, WNDS, RNDS);
END t_pkg;
/
-- create the package body
CREATE OR REPLACE PACKAGE BODY t_pkg AS
   FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2 IS
    v_val varchar2(1);
   BEGIN
      select dummy into v_val from dual;
      RETURN v_val;
   END;
END t_pkg;
/

Dříve platilo, že vám SQL neumožňovalo volat funkci, pokud to nedalo takový slib, ale toto omezení bylo zrušeno.

Raději bych z toho udělal rozlišovací znak mezi procedurou a funkcí. Stojí za to mít na paměti, že pokud funkce PL/SQL vyvolá výjimku NO_DATA_FOUND, volající příkaz SQL se nezdaří (protože žádná nalezená data nejsou chybou SQL). Takže raději používám procedury, pokud není objekt speciálně navržen pro volání z SQL.



  1. Chyba syntaxe PHP PDO nebo porušení přístupu:1064 při vložení

  2. Jak přejmenovat název sloupce nebo název tabulky v SQL Server - SQL Server / Kurz T-SQL, část 36

  3. Porovnejte dvě stejné tabulky MySQL

  4. Jak zruším omezení cizího klíče, pouze pokud existuje na serveru SQL?