Oracle PL/SQL 係 Oracle Database 嘅程序語言,呢幾年嚟咗好多新功能,幫開發者寫代碼更容易,性能更好。呢篇文章會介紹 9 個較新嘅功能,唔同版本加咗嘅,譬如 12c、18c 同 19c。呢啲功能讓 PL/SQL 更強大,適合現代應用。
第一個功能係 ACCESSIBLE_BY clause。喺 Oracle 12c Release 2 加咗,呢個 clause 可以限制邊個 package、function 或 procedure 可以呼叫某個 unit。譬如,你可以指定只有某個 package 先可以 access 某個 function,增加安全,避免亂 call。舉例:CREATE PROCEDURE my_proc ACCESSIBLE BY (PACKAGE my_pkg);
咁樣,唔係 my_pkg 就 call 唔到。呢個功能好有用喺大型系統,控制代碼訪問。
第二個功能係 BIND PL/SQL Types from SQL。喺 12c 加咗,之前 PL/SQL 类型只能喺 PL/SQL 裡用,現在可以直接喺 SQL 綁定 PL/SQL 类型嘅值。譬如,用 PL/SQL record 或 associative array 喺 SQL statement 裡。呢個減少咗 data conversion,性能提升。想像你有個 PL/SQL table,現在可以直接 insert into database table,唔使 loop 慢慢做。
第三個功能係 UTL_CALL_STACK package。喺 12c 加咗,呢個 package 提供更好嘅 error stack 資訊,比之前嘅 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 更詳細。你可以得到 call stack 嘅深度、單位名、行號等。舉例:DBMS_OUTPUT.PUT_LINE(UTL_CALL_STACK.DYNAMIC_DEPTH);
喺 debug 時超有用,快速找到 error 出喺邊。
第四個功能係 Implicit Statement Results。喺 12cR2 加咗,之前要用 DBMS_SQL 返回 result set,現在可以用 DBMS_SQL.RETURN_RESULT 直接返回 cursor 結果給 client。呢個簡化咗代碼,唔使 explicit open cursor。
第五個功能係 BEQUEATH CURRENT_USER for Views。喺 12cR2,view 可以 bequeath current_user,意思係 view 嘅權限跟 current user,而唔係 definer。呢個增加靈活性,喺 multi-user 環境好用。
第六個功能係 Bigger VARCHAR2。喺 12c,VARCHAR2 最大可以 32767 bytes,之前只係 4000。呢個讓你處理更大嘅 string,唔使用 CLOB,性能更好。
第七個功能係 JSON Support in PL/SQL。喺 12c 同之後,PL/SQL 有 native JSON 支持,用 JSON_OBJECT、JSON_ARRAY 等建 JSON data。譬如:json_obj := JSON_OBJECT('name' VALUE 'John');
呢個對 API 開發超方便。
第八個功能係 Qualified Expressions for Records and Arrays。喺 18c,加咗 qualified expression,可以用 constructor 初始化 record 或 array。譬如:rec := record_type(field1 => value1, field2 => value2);
簡潔得多。
第九個功能係 Real-Time Materialized Views。喺 19c,materialized view 可以 on query computation,real time refresh。雖然唔純 PL/SQL,但 PL/SQL 可以用嚟建複雜 query。
總結嚟講,呢 9 個功能讓 PL/SQL 更現代化,開發者可以寫更有效率、安全嘅代碼。建議大家升級 Oracle Database,用埋呢啲新嘢。更多細節,可以查官方文件。
https://orasites-prodapp.ocecdn.oraclecloud.com/site/connect/post/9-newer-features-oracle-plsql