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

Процедура Препълване на буфера

Първо, обикновено не бихте използвали DBMS_OUTPUT за дърводобив. Като цяло би имало много по-смислено да записвате данните в журнална таблица, особено ако вашата процедура за регистриране е дефинирана като автономна транзакция, така че да можете да наблюдавате данните от журнала, докато процедурата се изпълнява. DBMS_OUTPUT ще се покаже едва след като цялата процедура приключи изпълнението, в който момент обикновено е донякъде безсмислено.

Свързано с тази първа точка, разчитайки на DBMS_OUTPUT да се посочи на обаждащия се, че е имало някакво изключение, е много лоша практика. Като минимум бихте искали да повдигнете повторно изключението, което е било хвърлено, така че да получите стека за грешки, за да отстраните проблема.

Второ, когато активирате изхода, трябва да посочите размера на буфера, който DBMS_OUTPUT може да пише на. Изглежда, че сте декларирали буфера да бъде 20 000 байта, което е по подразбиране, ако просто

SQL> set serveroutput on;

Можете да промените това, като посочите размер, но максималният размер е ограничен до 1 000 000 байта

SQL> set serveroutput on size 1000000;

Ако планирате да актуализирате 3 милиарда реда в 1000 части от редове, това ще бъде твърде малък буфер. Ще генерирате повече от 60 пъти това количество данни с текущия си код. Ако използвате 10.2 както на клиента, така и на сървъра, трябва да можете да разпределите неограничен буфер

SQL> set serveroutput on size unlimited;

но това не е опция в по-ранните версии.

И накрая, сигурни ли сте, че трябва да прибегнете до PL/SQL на първо място? Изглежда, че можете да направите това по-ефективно, като просто изпълните едно АКТУАЛИЗИРАНЕ

UPDATE table_
   SET id = floor( seq/ 10000000000000 )
 WHERE id is null;

Това е много по-малко код, много по-лесен за четене и ще бъде по-ефективен от PL/SQL алтернативата. Единственият недостатък е, че изисква вашето таблично пространство UNDO да е достатъчно голямо, за да поеме генерираното UNDO, но актуализирането на една колона от NULL до различна от NULL числова стойност не трябва да генерира толкова много UNDO.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ANSI SQL стандарт за ключова дума ORACLE MINUS

  2. предава обект от Java към Oracle процедура

  3. Oracle Event Count Query

  4. Сравняване с дата в Oracle sql

  5. Сортиране по ден от седмицата от понеделник до неделя