Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Điền một bảng PL / SQL từ một khối trong các biểu mẫu D2k của Oracle

Đưa vào bảng PL / SQL từ một khối trong các biểu mẫu D2k của Oracle

Một bảng PL / SQL có thể được điền từ một khối bằng cách sử dụng biểu mẫu điền ẩn tích sẵn TABLE_FROM_BLOCK. Tính năng rất tiện dụng này giúp bạn không phải lặp lại khối một cách rõ ràng. Quy trình sau minh họa khái niệm:
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;

Để sử dụng kỹ thuật này, hãy làm theo các bước sau:

  1. Xác định một bản ghi PL / SQL tương đương với cấu trúc bản ghi sẽ được chuyển làm đầu vào. Trong trường hợp này, nó là state_rec và tạo thành hai mục NAME tương ứng với STATE_CODE STATE_NAME.

  2. Xác định bảng PL / SQL là một bảng các bản ghi thuộc loại được xác định trong bước 1. Trong trường hợp này, nó là my_table.

Lưu ý Tài liệu Oracle xác định bảng PL / SQL thuộc loại PLITBLM.TABLE_OF_ANY, nhưng việc xác định bảng PL / SQL theo cách tôi đã mô tả hoạt động tốt.

  1. Xác định một biến loại ITEMS_IN_BLOCK (một bảng gồm VARCHAR2 ) và đặt các phần tử riêng lẻ của nó là tên của các tên mục khối có giá trị là phần tử của loại bản ghi được xác định trong bước 1.

  2. Gọi TABLE_OF_ANY tích hợp sẵn với bảng PL / SQL đã xác định, tên khối đầu vào, số bản ghi bắt đầu, số bản ghi kết thúc và biến được xác định trong bước 3 được truyền dưới dạng tham số.

Mẹo Để chuyển tất cả các bản ghi trong khối, hãy chỉ định 1 làm số bản ghi bắt đầu và hằng số ALL_RECORDS là số bản ghi cuối.

Sự thành công hay thất bại của TABLE_FROM_BLOCK

Sự thành công hay thất bại của TABLE_FROM_BLOCK trong hầu hết các trường hợp, FORM_SUCCESS có thể bị mắc kẹt. Tuy nhiên, vẫn có những trường hợp ngoại lệ. Một ngoại lệ như vậy là lỗi FRM-40733:PL / SQL tích hợp sẵn TABLE_FROM_BLOCK không thành công. Trong trường hợp này, nó không phải là một trong FORM_SUCCESS, FORM_FAILURE, hoặc FORM_FATAL. LỖI BẬT thường là một giải pháp thay thế hữu ích cho FORM_SUCCESS để theo dõi sự thành công hay thất bại của TABLE_FROM_BLOCK và trong ví dụ này, cũng giúp chúng tôi khắc phục lỗi này. Lỗi trước xảy ra khi tên khối không tồn tại được chuyển hoặc các giá trị âm được chuyển cho các vị trí bản ghi bắt đầu hoặc bắt đầu và kết thúc. Mẹo Một điểm quan trọng khác cần lưu ý là TABLE_FROM_BLOCK hoàn toàn lặp qua khối, vì vậy POST-QUERY được thực thi cho mỗi bản ghi. Tuy nhiên, nó nhanh hơn so với vòng lặp thủ công. Đối với tập kết quả gồm 3.300 bản ghi, nó được xem là nhanh hơn 3,5 lần so với việc lặp thủ công với Oracle 8.0.5 chạy trên 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. Cách thực thi chức năng trong Oracle với các tham số

  2. Múi giờ java.sql.Timestamp có cụ thể không?

  3. làm thế nào để chuyển đổi csv sang bảng trong oracle

  4. tính toán giờ dựa trên giờ làm việc trong Oracle SQL

  5. Dịch vụ cơ sở dữ liệu trên AWS và Nền tảng đám mây Oracle