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

Thay đổi định nghĩa TYPE trong Oracle 21c

SQL * Plus và PL / SQL đã mâu thuẫn trong nhiều năm - có rất nhiều trường hợp trong đó cách một tác vụ được thực hiện bằng SQL * Plus khác với cách hoàn thành tác vụ tương tự hoặc tương tự đó trong PL / SQL. Ngoài ra, có những kiểu dữ liệu có sẵn trong PL / SQL không có sẵn trong SQL * Plus. Oracle phiên bản 21c cung cấp cách sử dụng một số kiểu dữ liệu PL / SQL trong định nghĩa kiểu SQL * Plus, với lưu ý rằng kiểu PL / SQL sẽ không liên tục. Điều này có nghĩa là gì và làm thế nào để người ta sử dụng kho tàng các loại mới được tìm thấy này? Hãy điều tra thêm và xem những gì chúng tôi tìm thấy.

Hiện tại, việc tạo một số kiểu nhất định trong cả PL / SQL và SQL * Plus liên quan đến sự thay đổi trong cú pháp - kiểu có hai phần tử trong PL? SQL là một bản ghi và cấu trúc cùng kiểu đó trong SQL * Plus sẽ trở thành một kiểu đối tượng. Đây là điều mà các nhà phát triển đã quen với việc làm. Tuy nhiên, nếu những kiểu đó cần phải chứa các kiểu PL / SQL (boolean, pls_integer, binary_integer, v.v.), đáng tiếc là không có cách nào dễ dàng trong SQL * Plus để đáp ứng yêu cầu đó. Cho đến năm 21c. Hãy xem ví dụ về cách có thể sử dụng các kiểu như vậy trong định nghĩa kiểu SQL * Plus. Giả sử, để đối số, cần có một kiểu với kiểu dữ liệu BOOLEAN trong SQL * Plus. Trước 21c, cần phải thực hiện RẤT NHIỀU mã để bắt chước kiểu dữ liệu BOOLEAN - với 21c, chúng ta có thể sử dụng BOOLEAN như một kiểu, miễn là cơ sở dữ liệu không cố lưu trữ dữ liệu vào đĩa:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num    number,
  4     e_nme    varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean
  7  ) not persistable ;
  8  /

Type created.

Một đối tượng như vậy có thể được chuyển đến một đơn vị chương trình PL / SQL với giá trị BOOLEAN tại thời điểm chạy và Oracle biết giá trị BOOLEAN không tồn tại bên ngoài ngữ cảnh hiện tại. Như đã nêu trước đó, điều này không bị giới hạn đối với các giá trị BOOLEAN; hãy thử cả PLS_INTEGER và BINARY_INTEGER:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     number,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Type created.

Bất kỳ kiểu dữ liệu nào không thể tồn tại trong SQL * Plus sẽ không phải do lệnh "không thể duy trì", mặc dù chúng có thể được chuyển tới một đơn vị PL / SQL tại thời điểm chạy.

Nếu bạn đang tự hỏi liệu điều này cũng có sẵn để sử dụng trong các bảng và varrays lồng nhau hay không, câu trả lời là có:

SQL> create or replace
  2  type i_array as
  3  varray(40) of (binary_integer)
  4  not persistable;
  5  /

Type created.

Thật không may, điều này không cho phép sử dụng tham chiếu% TYPE (một phím tắt nổi tiếng và thường được sử dụng với mã hóa PL / SQL để đảm bảo khớp kiểu giữa mã PL / SQL và các bảng được sử dụng) trong bất kỳ loại nào bằng cách sử dụng chỉ thị “không bền vững”:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     emp.empno%type,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Warning: Type created with compilation errors.

SQL>
SQL> show errors
Errors for TYPE EMP_SAL_APPROVAL_FOR_PL

LINE/COL ERROR
-------- -----------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
3/12     PLS-00201: identifier 'EMP.EMPNO' must be declared

Oracle đã đạt được một bước tiến quan trọng với chỉ thị “không bền vững”, cho phép các lập trình viên sử dụng các kiểu dữ liệu PL / SQL trong các định nghĩa kiểu SQL * Plus; điều này rất có thể sẽ bị hạn chế sử dụng hoặc khiếu nại khi biết dữ liệu được đại diện bởi các cấu trúc như vậy sẽ không được lưu trữ trong cơ sở dữ liệu, nhưng khi chuyển các giá trị BOOLEAN, PL:S_INTEGER hoặc BINARY_INTEGER từ SQL * Plus sang các đơn vị chương trình PL / SQL, nó có thể loại bỏ mọi sự cố không khớp về kiểu do không có kiểu như vậy trong SQL * Plus gây ra. Và đây có lẽ là bước đầu tiên trong việc mở rộng khả năng tương thích chức năng SQL * Plus với PL / SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm mới / Cập nhật màn hình biểu mẫu trong Oracle D2k Forms 6i

  2. Oracle’s Containers cho J2EE (OC4J) trong R12

  3. Oracle có cho phép tùy chọn đọc không cam kết không?

  4. Cập nhật Salesforce từ Oracle®

  5. EF và TransactionScope cho cả SQL Server và Oracle mà không cần chuyển sang DTC?