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

Oracle PL/SQL - Изключенията NO_DATA_FOUND лоши ли са за производителността на съхранената процедура?

Не бих използвал явен курсор, за да направя това. Стив Ф. вече не съветва хората да използват изрични курсори, когато може да се използва скрит курсор.

Методът с count(*) не е безопасно. Ако друга сесия изтрие реда, който отговаря на условието след реда с count(*) и преди реда с select ... into , кодът ще хвърли изключение, което няма да бъде обработено.

Втората версия от оригиналната публикация няма този проблем и обикновено е предпочитана.

Въпреки това има незначителни допълнителни разходи при използване на изключението и ако сте 100% сигурни, че данните няма да се променят, можете да използвате count(*) , но препоръчвам да не го правите.

Изпълних тези сравнителни тестове на Oracle 10.2.0.1 на 32 битов Windows . Гледам само изминалото време. Има и други тестови снопове, които могат да дадат повече подробности (като брой на блокиране и използвана памет).

SQL>create table t (NEEDED_FIELD number, COND number);
SQL>insert into t (NEEDED_FIELD, cond) values (1, 0);
declare
  otherVar  number;
  cnt number;
begin
  for i in 1 .. 50000 loop
     select count(*) into cnt from t where cond = 1;

     if (cnt = 1) then
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     else
       otherVar := 0;
     end if;
   end loop;
end;
/
declare
  otherVar  number;
begin
  for i in 1 .. 50000 loop
     begin
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     exception
       when no_data_found then
         otherVar := 0;
     end;
   end loop;
end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа разликата в часовете между две дати?

  2. Oracle - извлича времево клеймо от низ varchar?

  3. Няма налични идентификационни данни в пакета за сигурност, когато се осъществява връзка с Oracle

  4. Намиране на дублиращи се записи в таблица

  5. Обработка на данни за семена в R12.2 онлайн кръпка