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

Попълване на PL/SQL таблица от блок в Oracle D2k Forms

Попълване на PL/SQL таблица от блок в Oracle D2k Forms

Таблица PL/SQL може да бъде попълнена от блок, като се използва вграденото неявно попълване на Forms TABLE_FROM_BLOCK. Тази много удобна функция елиминира необходимостта да преглеждате блока изрично. Следната процедура илюстрира концепцията:
PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)

IS



/* Define a PL/SQL record with two fields code and name */



TYPE state_rec IS RECORD (code varhcar2(2), name varhcar2(30));



/* Define a PL/SQL table of the record defined above */



TYPE my_table IS TABLE OF state_rec INDEX BY BINARY_INTEGER;

my_table1 my_table;



/* Define a variable of type ITEMS_IN_BLOCK. ITEMS_IN_BLOCK is a

Forms-defined table */

Item_data ITEMS_IN_BLOCK;

Cnt NUMBER;

BEGIN

Item_data(1) := 'STATE_CODE';

item_data(2) := 'STATE_NAME';



/* The call to the Forms built-in TABLE_FROM_BLOCK retrieves the records

from the block and populates the my_table1 table of records */



TABLE_FROM_BLOCK(my_table1, 'STATE',1, ALL_RECORDS, item_data);

-- The SUCCESS or FAILURE of this built-in can be assessed

-- with FORM_SUCCESS, just like any other built-in



IF NOT FORM_SUCCESS THEN

RAISE FORM_TRIGGER_FAILURE;

END IF;

Cnt := my_table1.COUNT;

END populate_plsql_table;

За да използвате тази техника, изпълнете следните стъпки:

  1. Дефинирайте PL/SQL запис, който да е еквивалентен на структурата на записа, която да се предава като вход. В този случай това е state_rec и представлява двата елемента CODE и NAME съответстващ на STATE_CODE и STATE_NAME.

  2. Дефинирайте таблицата PL/SQL като таблица със записи от типа, дефиниран в стъпка 1. В този случай това е my_table.

Забележка:Документацията на Oracle дефинира PL/SQL таблицата да бъде от тип PLITBLM.TABLE_OF_ANY, но дефинирането на PL/SQL таблицата по начина, който описах, работи добре.

  1. Дефинирайте променлива от тип ITEMS_IN_BLOCK (таблица от VARCHAR2 ) и задайте неговите отделни елементи да бъдат имената на имената на блоковите елементи, чиито стойности фигурират като елементи от типа на записа, дефиниран в стъпка 1.

  2. Обадете се на вградената TABLE_OF_ANY с дефинираната PL/SQL таблица, име на входен блок, номер на началния запис, номер на крайния запис и променливата, дефинирана в стъпка 3, предадени като параметри.

Съвет За да предадете всички записи в блока, посочете 1 като начален номер на запис и константата ALL_RECORDS като номер на крайния запис.

Успехът или неуспехът на TABLE_FROM_BLOCK

Успехът или неуспехът на TABLE_FROM_BLOCK в повечето случаи може да бъде хванат от FORM_SUCCESS. Има обаче изключения. Едно такова изключение е грешката FRM-40733:PL/SQL вградената TABLE_FROM_BLOCK неуспешна. В този случай не е един от FORM_SUCCESS, FORM_FAILURE, или FORM_FATAL. ВКЛ-ГРЕШКА често е удобна алтернатива на FORM_SUCCESS за проследяване на успеха или неуспеха на TABLE_FROM_BLOCK и в този пример също ни помага да уловим тази грешка. Предходната грешка възниква, когато се подаде несъществуващо име на блок или се подадат отрицателни стойности за началната или началната и крайната позиция на записа. Съвет Друг важен момент, който трябва да се отбележи, е, че TABLE_FROM_BLOCK имплицитно преминава през блока, така че POST-QUERY се изпълнява за всеки запис. Това обаче е по-бързо от ръчния цикъл. За набор от резултати от 3300 записа се видя, че е 3,5 пъти по-бърз от ръчния цикъл с Oracle 8.0.5, работещ под Windows NT.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение в PL/SQL колекциите в Oracle Database

  2. Настройки на Django oracle db

  3. SQL присъединяване на нулеви стойности

  4. Как да създадете login.sql файл за SQLcl

  5. Разлики в Oracle между NVL и Coalesce