Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Semantyka procedur/funkcji składowanych Oracle w kontekście transakcyjnym

Możesz użyć RESTRICT_REFERENCES aby wskazać, że funkcja nie będzie odczytywać/zapisywać stanu pakietu lub bazy danych.

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

Kiedyś tak było, że SQL nie pozwalał na wywołanie funkcji, chyba że złożył taką obietnicę, ale to ograniczenie zostało usunięte.

Wolałbym zrobić z tego wyróżnik między procedurą a funkcją. Warto pamiętać, że jeśli funkcja PL/SQL zgłosi wyjątek NO_DATA_FOUND, wywołanie instrukcji SQL nie zawiedzie (ponieważ brak znalezionych danych nie jest błędem SQL). Dlatego wolę używać procedur, chyba że obiekt jest specjalnie zaprojektowany do wywoływania z SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainicjować macierz w plsql

  2. Wydajność Oracle JDBC w zestawie wyników

  3. Jak utworzyć widok z wieloma zapytaniami wybierającymi, które zwracają wiele wierszy w Oracle?

  4. Błąd podczas wykonywania procedury Strored

  5. Jak stworzyć tabelę w Oracle SQL Developer?