ネイティブコンパイルについて
ストアド・サブプログラムをネイティブコンパイルする方法を説明します。
実際の方法の前に少し解説を、Oracleではソースコードだけでなく、コンパイルされたコードもデータベースに格納します。このとき格納されるコンパイルされたコードはデフォルト設定だと中間コードと言われるものになります。
実際にPL/SQLを実行する際には中間コードを機械(Oracle)が読める固有コードというものにコード変換を行い実行します。
格納されるコンパイルされたコードを中間コードではなく最初からシステム固有コードにして格納することによりパフォーマンス向上させるのが、ネイティブコンパイルです。
ネイティブコンパイルの方法
ネイティブコンパイルの方法は以下の手順で行います。
- ネイティブコンパイルを有効にする。
- PL/SQLをコンパイルする。
--ネイティブコンパイルを有効にする。 ALTER SESSION SET plsql_code_type = 'NATIVE'; --PL/SQLをコンパイルする。 CREATE OR REPLACE PROCEDURE TEST_PROCEDURE IS var1 VARCHAR2(10) := 'HelloWorld'; BEGIN DBMS_OUTPUT.PUT_LINE( var1 ); END TEST_PROCEDURE; / --PL/SQLがネイティブコンパイルされているか確認する。 column name format a30 column type format a20 column plsql_code_type format a10 SELECT name, type, plsql_code_type FROM user_plsql_object_settings WHERE plsql_code_type = 'NATIVE';
まずはPL/SQLがネイティブコンパイルされているか確認しましょう。
まだネイティブコンパイルされていないことがわかりますね。
SQL> SELECT * FROM user_plsql_object_settings 2 WHERE plsql_code_type = 'NATIVE'; レコードが選択されませんでした。
ネイティブコンパイルを有効にしてPL/SQLをネイティブコンパイルしましょう。
SQL> ALTER SESSION SET plsql_code_type = 'NATIVE'; セッションが変更されました。 SQL> CREATE OR REPLACE PROCEDURE 2 TEST_PROCEDURE 3 IS 4 var1 VARCHAR2(10) := 'HelloWorld'; 5 BEGIN 6 DBMS_OUTPUT.PUT_LINE( var1 ); 7 END TEST_PROCEDURE; 8 / プロシージャが作成されました。
再度ネイティブコンパイルされているか確認してみてください。
SQL> column name format a30 SQL> column type format a20 SQL> column plsql_code_type format a10 SQL> SELECT name, type, plsql_code_type 2 FROM user_plsql_object_settings 3 WHERE plsql_code_type = 'NATIVE'; NAME TYPE PLSQL_CODE ------------------------------ -------------------- ---------- TEST_PROCEDURE PROCEDURE NATIVE
「PLSQL_CODE」が「NATIVE」のものがネイティブコンパイルされているものです。これでネイティブコンパイルされていることが分かりました\(^o^)/
コメント