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

Вложен курсор в курсор

Обикновено просто ще съедините двете маси.

FOR some_cursor IN (SELECT s.col1,
                           s.col2
                      FROM sometable s
                           JOIN temp_table t ON (s.col3 = t.col1))
LOOP
  <<do something>>
END LOOP

Тъй като обаче сте загрижени за ефективността

  • Е TEMP_TABLE наистина ли е временна маса? Ако да защо? Изключително рядко се случва Oracle действително да трябва да използва временни таблици, така че това ме кара да подозирам, че вероятно правите нещо неефективно, за да попълните временната таблица на първо място.
  • Защо имате курсор FOR цикъл за обработка на данните от TEMP_TABLE ? Обработката ред по ред е най-бавният начин да правите каквото и да било в PL/SQL, така че обикновено се избягва, ако сте загрижени за ефективността. От гледна точка на производителността искате да увеличите максимално SQL, така че вместо да правите цикъл, който извършва поредица от един ред INSERT или UPDATE операции, бихте направили едно INSERT или UPDATE който модифицира цял набор от редове. Ако наистина трябва да обработвате данни на парчета, това е мястото, където PL/SQL колекциите и груповата обработка ще влязат в действие, но това няма да е толкова ефективно, колкото чистия SQL.
  • Защо имате DISTINCT във вашата заявка срещу TEMP_TABLE ? Наистина ли очаквате, че ще има дубликат big_id стойности, които не са погрешни? През повечето време хората използват DISTINCT неправилно, или за да прикриете проблеми, при които данните са били обединени неправилно, или където принуждавате Oracle да извърши скъпо сортиране само в случай, че в бъдеще бъдат създадени неправилни данни, когато ограничението би било по-подходящият начин да се защитите.


  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. Стойност по подразбиране за параметри, които не са преминали SQLPlus скрипт

  3. EM 12c Регулиране на праговите стойности

  4. Сравнение на дати на Oracle в клауза where

  5. Какво представляват подзаявките в oracle