Oracle
 sql >> база данни >  >> RDS >> Oracle

Семантика на съхранени процедури/функции на Oracle в транзакционен контекст

Можете да използвате RESTRICT_REFERENCES за да покаже, че дадена функция няма да чете/записва състояние на пакет или база данни.

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

Преди беше така, че SQL не ви позволява да извикате функция, освен ако не направи такова обещание, но това ограничение отпадна.

Бих предпочел да го направя разграничител между процедура и функция. Струва си да се има предвид, че ако PL/SQL функция повдигне изключение NO_DATA_FOUND, извикващият SQL оператор не се проваля (тъй като липсата на намерени данни не е SQL грешка). Така че предпочитам да използвам процедури, освен ако обектът не е специално проектиран да бъде извикан от 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. В Oracle има ли функция, която изчислява разликата между две дати?

  2. Има ли разлика между сурогатен ключ, синтетичен ключ и изкуствен ключ?

  3. Как да извикате съхранена процедура в пакет оракул с Entity Framework?

  4. ROWDEPENDENCIES Горни разходи в Oracle

  5. Сравнение на доставчици, съвместими с Entity Framework за Oracle?