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

pl/sql функцията е извикана колко пъти?

Това е вид ситуация, при която някои експерименти са полезни (това беше проведено на 10g). Използвайки следната заявка, можем да кажем, че нормалните функции, използващи едни и същи параметри (в този случай нито един), ще бъдат изпълнени всеки път, когато бъдат извикани:

select dbms_random.value() from all_tables

Това е така, защото Oracle приема, че функцията няма да връща една и съща стойност последователно, освен ако не й кажете друго. Можем да направим това, като създадем функция, използваща deterministic ключова дума:

CREATE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   RETURN DBMS_RANDOM.VALUE ();
END;

Използване на тази функция вместо dbms_random в първата заявка ни казва, че заявката се изпълнява само веднъж, въпреки многото извиквания. Но това само изяснява select раздел. Ами ако използваме една и съща детерминистична функция и в двата select и where клауза. Можем да тестваме това, като използваме следната заявка:

SELECT rand_det
FROM   all_tables
WHERE  rand_det > .5;

Може да се наложи да изпълните това няколко пъти, за да видите нашето доказателство, но в крайна сметка ще видите списък със стойности, по-малки от 0,5. Това ни предоставя доказателство, че дори детерминистичната функция се изпълнява два пъти:веднъж за всеки раздел, в който се появява. Като алтернатива можете да промените нашата детерминистична функция, както следва, след което да изпълните последващата заявка, която ще разкрие 2 реда, записани на DBMS_OUTPUT .

CREATE OR REPLACE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   DBMS_OUTPUT.put_line ('Called!');
   RETURN DBMS_RANDOM.VALUE ();
END;

SELECT rand_det
FROM   all_tables;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да създам файл за качване в grails, който работи с oracle?

  2. Грешка в TNS Listener

  3. Проблем с изпълнението на скрипт на oracle от командния ред с помощта на sqlplus

  4. Oracle - Извличане на дата/час в милисекунди от полето тип данни ДАТА

  5. Получете набори от корекции за база данни