sql >> Database >  >> RDS >> Oracle

Semantiek van Oracle-opgeslagen procedures / functies in een transactiecontext

U kunt RESTRICT_REFERENCES gebruiken om aan te geven dat een functie de pakket- of databasestatus niet kan lezen/schrijven.

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

Vroeger stond SQL je niet toe om een ​​functie aan te roepen, tenzij het zo'n belofte deed, maar die beperking werd geschrapt.

Ik zou er de voorkeur aan geven om het een onderscheid te maken tussen een procedure en een functie. Het is de moeite waard om in gedachten te houden dat als een PL/SQL-functie een NO_DATA_FOUND-uitzondering genereert, een aanroepende SQL-instructie niet mislukt (aangezien geen gegevens gevonden geen SQL-fout is). Ik gebruik dus liever procedures, tenzij het object specifiek is ontworpen om vanuit SQL te worden aangeroepen.



  1. Hoe u alle records op externe sleutel kunt ophalen met Laravel

  2. Echo booleaans veld als ja/nee of andere waarden

  3. Python db-api:fetchone vs fetchmany vs fetchall

  4. Effectieve strategie voor het achterlaten van een audittrail/wijzigingsgeschiedenis voor DB-applicaties?