2023年4月20日木曜日

apex.oracle.comがOracle APEX 23.1のプレリリース版にアップグレードされました

 まだ翻訳されていないため、日本語の環境からapex.oracle.comにアクセスしても、Oracle APEX 23.1の情報が見つかりません。

Oracle APEX 23.1の新機能ガイドのURLは以下になります。

https://apex.oracle.com/en/platform/features/whats-new-231/

新しく追加された機能として、以下があります。

テンプレート・コンポーネント


今までのクラシック・レポートは静的なHTMLをテンプレートとして、サーバー側で完全なHTMLを生成していました。静的なテンプレートの代わりにテンプレート・コンポーネントを導入し、テンプレート・ディレクティブの記述によりクライアント側で完全なHTMLを生成します。

テンプレート・コンポーネントはプラグインという形で、独立してエクスポートできます。一度、テンプレート・ディレクティブで記述したUIを容易に他のアプリケーションに導入できるようです。

クラシック・レポートを置き換えるもので、カード・リージョンについても(少なくても行レイアウトについては)置き換える対象となるでしょう。

Philipp Hartenfellerさんのブログ記事で詳しく紹介されています。

PWAのプッシュ通知


Oracle APEXだけでプッシュ通知ができるようになりました。プッシュ通知を行うプロセス・タイプおよびAPIが提供されているようです。GoogleのFirebaseを使ったりプッシュ通知を転送するサーバーが不要になりました。

以下の記事で紹介している作業は不要になります。
Firebaseを使ってAPEXアプリにプッシュ通知を実装する(1) - Firebaseの設定
Firebaseを使ってAPEXアプリにプッシュ通知を実装する(2) - Node.jsの準備
Firebaseを使ってAPEXアプリにプッシュ通知を実装する(3) - APEXアプリの作成

開発者であるVincent Morneauさんが、この機能についてツイートしています。



オブジェクト・ブラウザの刷新


表やビューを選択リストで選んで一覧する形式から、ツリーで表示するように変わりました。全体的に使いやすくなりました。


ページ・プロセスの拡張


プロセスをバックグラウンドで実行できるようになりました。時間がかかる処理を、DBMS_SCHEDULERを呼び出して、自力でジョブとしてスケジュールする必要がなくなりました。またバックグラウンドの処理の進捗を確認するためのAPIも提供されているようです。

以下の記事で紹介している作業の一部は不要になるでしょう。
APEX_DATA_LOADINGを使ってデータをロードする


RESTデータ・ソースの拡張


APEX 22.2で実装されたAPI呼び出しが、ローカルのプロシージャやファンクション以外にREST APIも呼び出せるように拡張されました。

また、REST APIの検出に呼び出し時のレスポンスだけではなく、Swagger/OpenAPIも使えるようになったとのことです。

大項目以外の新機能で気になったもの


Application Continuity - ページ・アイテムへの値の代入時にトランザクションがコミットされる(こちらの記事で解説)動作を制御可能にした模様です。ページ処理の終了時にコミットすることで、それまでに例外が発生した場合、全体がロールバックされます。いわゆる冪等性(idempotency)の確保を容易にしています。

Export and Import in Theme Roller - テーマ・ローラーからテーマのエクスポートとインポートができるようになった、とのことです。

Adopted TinyMCE - リッチ・テキスト・エディタのコンポーネントとして今まではCKEditorを使用していました。これがTinyMCEに置き換わりました。

以前に書いたCKEditorに関係する記事は無効になります。
CKEditor5でのリンク属性にtarget, relを付加する
CKEditor5による画像アップロードを実装する(1) - 準備
CKEditor5による画像アップロードを実装する(2) - REST APIの作成
CKEditor5による画像アップロードを実装する(3) - 完成
CKEditor5による画像アップロードを実装する(4) - 画像をオブジェクト・ストレージに保存する
CKEditor5による画像アップロードを実装する(5) - 動的コンテンツを使う
CKEditor5のInline editorを使ってみる
CKEditor5のmention機能を実装してみる
リッチ・テキスト・エディタでHTMLを読み込むだけで元のHTMLが変更される

2023年4月20日よりAPEX Office HoursでAPEX 23.1関連のセッションが始まります。

Part 1: What's new in Oracle APEX 23.1 (日本時間の4/20 23:00)
Part 2: What's new in Oracle APEX 23.1 (日本時間の4/27 23:00)
Part 3: What's new in Oracle APEX 23.1 (日本時間の5/4 23:00)
Part 4: What's new in Oracle APEX 23.1 (日本時間の5/11 23:00)

これらのセッションで新機能について詳しく解説されるでしょう。

2023年4月14日金曜日

カレンダを月曜日から始める

標準のカレンダを月曜日から始める方法を紹介します。Oracle APEXのギャラリに含まれているサンプル・カレンダを使って確認します。

デフォルトではカレンダは日曜日から始まります。

ページ・デザイナを開いて、カレンダ・リージョン属性を確認します。一般にリージョン固有の設定(この場合はカレンダ)は、プロパティ・エディタ属性に含まれます。

開始する曜日の指定は、設定には含まれていません。また、詳細初期化JavaScriptファンクションヘルプにも、そのような指定は含まれていません。

Oracle APEXのカレンダ・リージョンは、実際はFullCalendarです。そのため、FullCalendarに機能として含まれていれば、Oracle APEXから(設定やヘルプに含まれていなくても)利用することができます。

コンポーネントのバージョンに注意が必要です。Oracle APEXにバンドルされているJavaScriptコンポーネントは、必ずしも最新ではありません。バージョンはリリース・ノートに記載されています。FullCalendarは5.11.2がバンドルされています。FullCalendar自体の最新バージョンは6.1.5(2023年4月14日現在)です。

FullCalendarのドキュメントを確認すると、firstDayというプロパティが見つかりました。

https://fullcalendar.io/docs/v5/firstDay


fistDayを1とするとカレンダが月曜日から開始されます。(デフォルトは0 - 日曜日)

以下のコードを詳細初期化JavaScriptファンクションに記述します。
function (p) {
    p.firstDay = 1;
}

ページを実行すると、カレンダが月曜日から始まっていることが確認できます。


カレンダ以外でも、3rdパーティのJavaScriptコンポーネントを使って実装されているリージョンやページ・アイテムがあります。チャートであればOracle JET、リッチ・テキスト・エディタであればCKEditor5、マップ・リージョンであればMapLibreのドキュメントを参照することにより、それらのコンポーネントに実装されている機能をさらに活用することができます。

以上です。

Oracle APEXのアプリケーション作成の参考になれば幸いです。

2023年4月13日木曜日

Gistに保存したコードからMLE JavaScriptモジュールを作成する

以前の記事DB 23cのMLEでJavaScriptモジュールを作成するにて、以下のDDLによりDB 23cのMLE JavaScriptモジュールfactorial_modを作成しています。

CREATE OR REPLACE MLE MODULE factorial_mod LANGUAGE JAVASCRIPT AS

export function factorial(num) {
    if(num < 0) {
        return -1;
    } else if (num == 0) {
        return 1;
    } else {
        return(num * factorial(num-1));
    }
}
/
このJavaScriptのコードをDDL中に記述する代わりに、Gistに作成したスニペットを使用します。


例えば以下のURLより、Gistのスニペットを取得できます。

https://gist.githubusercontent.com/ujnak/1808026f3728baedc908b5baf8ac4b99/raw/4dbf9898971f8b696eb83d86f33f2246ecb6d40d/factorial_mod.js

ホストgist.githubusercontent.comへRESTコールアウトができない場合は、以下のコードをSYSで実行して、コールアウトを許可します。
begin
  DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
    host => 'gist.githubusercontent.com',
    ace => xs$ace_type(
        privilege_list => xs$name_list('connect','resolve'),
        principal_name => 'APEX_220200',
        principal_type => xs_acl.ptype_db));
  commit; 
end;
/
ネットワークACLの設定については、以下の記事で解説しています。

Autonomous DatabaseのAPEXでUTL_HTTPを使用する

以上の準備が済んだところで、JavaScriptのモジュールを作成します。以下のDDLを実行します。(23cからfrom dualが不要になりました。このコードではfrom dualを省いています。)


オブジェクト・ブラウザMLEモジュール - JavaScriptから、作成したモジュールFACTORIAL_MODを確認します。


Gistを例に取りましたが、HTTPで呼び出すことができればリポジトリは選ばないでしょう。特殊な認証が必要な場合は、一旦データベースにCLOBとして保存した上でJavaScriptモジュールを作成する必要がありそうです。

どちらにしても、DDLからソースコードを除くことにより、CI/CDに載せることが容易になるはずです。

2023年4月12日水曜日

DB 23cのLock Free Reservationを使ってみる

 DB 23cよりLock Free Reservationと呼ばれる機能が追加されました。これは以下の操作を行います。

  • 数値列の操作を加算と減算に限定します。
  • 演算結果を更新する代わりに、差分をジャーナルに保存します。
  • 値が書かれているブロックは変更しないため、ロックを取得しません。値自体は変更されたように見えます。
  • 別のトランザクションが同じ行の同じ列を更新する場合も、ロックを取得せずに差分をジャーナルに保存するので待機が発生しません。
  • トランザクションのコミット時に差分を適用します。
  • SAGAが開始していて(DBMS_SAGA.BEGIN_SAGAが呼び出された後)、SAGAのロールバックが発生した(DBMS_SAGA.ROLLBACK_SAGAが呼びされる)場合は、自動的に補償トランザクションが実行されます。
この機能を実装してみて、実際に効果を確認してみます。SAGAの実装は大変なので、それは除きます。また、仕組みの詳細について解説することは、目的としていません。

効果の確認に、Oracle REST Data ServicesのRESTサービスを使います。

最初に表CALL_COUNTERを作成します。

create table call_counter(
    id number primary key,
    count number
);

あらかじめ1行データを投入します。主キーIDの値はです。UPDATEを実行するときは、条件として主キーの値を指定する必要があります。

insert into call_counter(id, count) values(1, 0);

Lock Free Reservationを有効にする場合は、以下のようにreservableを指定します。

create table call_counter(
    id number primary key,
    count number reservable
);


最初に、Lock Free Reservationなしで作業を進めます。以下のコードがGETハンドラの処理になります。


RESTfulサービスのモジュールとしてcallテンプレートとしてcountを作成し、GETハンドラを作成します。ソース・タイプPL/SQLを選択します。


テストの準備ができたので、同時にRESTサービスを呼び出してみます。RESTサービスの待機時間を含む処理時間は、5、9、12、16秒と増えていきます。countは52、53、54、55となっています。


列countをreservableに変更します。

alter table call_counter modify (count reservable);

ほとんどのリクエストが5秒で終了します。ロック待機が発生していないことが確認できます。また、逐次処理にはなっていないため、countは全部同じ値(以下では55)です。次にRESTサービスを呼び出すと、countは4が加わり59になります。


Lock Free Reservationには、このような効果があります。

reservableとなっている列がある表をドロップしようとすると、ORA-55764が発生します。そのため、表をドロップする前に列をnon reservableに変更する必要があります。

SQL> drop table call_counter;

drop table call_counter

           *

ERROR at line 1:

ORA-55764: Cannot DROP or MOVE tables with reservable columns. First run "ALTER

TABLE <table_name> MODIFY (<reservable_column_name> NOT RESERVABLE)" and then

DROP or MOVE the table.



SQL> 


以上で、Lock Free Reservationの説明は終了です。

ここまで極端なホットスポットはあまり無いとは思います。とはいえ加算と減算に操作を限定できる数値列、例えばページの訪問数やいいねをクリックした数のようなデータがある場合は、適用を検討する価値はあるでしょう。

2023年4月11日火曜日

DB 23cのMLEでJavaScriptモジュールを作成する

 Oracle Database 23c Freeの環境上でJavaScriptのMLEモジュールを作成し、APEXのSQLコマンドより呼び出してみます。

マニュアルの記載部分は以下になります。

JavaScript Developer's Guide
2 MLE JavaScript Modules and EnvironmentsJavaScript Developer's Guide

マニュアルに記載されている例に間違いがあるため、一部を変更しています。最初にMLEモジュール(JavaScriptモジュール)factorial_modを作成します。ファンクションfactorialがエクスポートされます。
CREATE OR REPLACE MLE MODULE factorial_mod LANGUAGE JAVASCRIPT AS

export function factorial(num) {
    if(num < 0) {
        return -1;
    } else if (num == 0) {
        return 1;
    } else {
        return(num * factorial(num-1));
    }
}
/
DDLなので、言語SQLを選択します。


作成されたMLEモジュールはオブジェクト・ブラウザMLEモジュール - JavaScriptより、参照や修正(および新規作成)が可能です。モジュールの本文はDDLに埋め込む以外に、CLOB、BLOBおよびBFILEとして指定することも可能です。


次にMLE環境を作成します。マニュアルの例を少し変更し、環境名やインポート名に小文字を使うようにしました。モジュール名またはインポート名を指定する箇所の違いが分かりやすくなると思います。
CREATE MLE ENV "myFactorialEnv" IMPORTS('factorialMod' MODULE FACTORIAL_MOD);
/
こちらもDDLなので、言語SQLを選択します。


オブジェクト・ブラウザMLE環境より、作成したMLE環境の参照と変更(および新規作成)が可能です。


MLEモジュールFACTORIAL_MODfactorialを呼び出してみます。

以下を実行します。今度はJavaScriptの実行なので、言語JavaScript(MLE)を選択します。また、モジュールのインポートを行うため環境としてmyFactorialEnvを選択します。
const { factorial } = await import('factorialMod');
console.log(factorial(3));
実行すると、結果が表示されます。


SQLコマンドから、MLEモジュールとして作成したファンクションを呼び出すことができました。

SQL Developer Web(データベース・アクション)にも、MLE JSというJavaScriptを実行するツールが含まれています。

スニペットとして全く同じコードを実行してみましたが、解析エラーが発生します。この原因は、今のところ不明です。


エクスポートしたJavaScriptのファンクションfactorialを、SQLから呼び出せるようにします。ファンクションを作成し、JavaScriptのファンクションをSIGNATUREに指定します。
CREATE OR REPLACE FUNCTION js_factorial(
    p_num number)
return number
AS MLE MODULE FACTORIAL_MOD
SIGNATURE 'factorial(number)';
/

ファンクションが作成されたら、以下のSQLを実行し作成したファンクションjs_factorialを呼び出してみます。

select js_factorial(3) from dual;


結果が出力されます。

Oracle APEXのアプリケーションに適用されるMLE環境は、アプリケーション定義セキュリティデータベース・セッションのセクションにあるMLE環境で設定します。


MLEでJavaScriptモジュールを扱う方法の紹介は以上です。

Oracle APEXのアプリケーション作成の参考になれば幸いです。

2023年4月7日金曜日

PGQLを使ったAPEXアプリを23cのSQL Property Graphで置き換えてみる

PGQLをトランスレートして生成したSQLをレポートのソースとした、Oracle APEXのアプリケーションを作成したことがあります。

PGQLの2層モードで生成されるSQLをAPEXのレポートに組み込む

Oracle Database 23cよりSQL/PGQ(Property Graph Queries)がサポートされ、グラフ形式のデータを直接扱うことができるようになりました。

以前の記事で作成したAPEXアプリケーションを、SQL/PGQを使うように見直してみます。

使用するのはこちらの記事で作成した、Oracle Database 23c FreeにOracle APEX 22.2をインストールした環境です。Oracleが提供しているVirtualBoxのAPEXを日本語化した環境でも同様に作業ができるでしょう。

ワークスペースとしてAPEXDEV(紐づいているスキーマもAPEXDEV)が作成されていることを前提とします。ワークスペースやスキーマ名が異なる場合は、APEXDEVの部分を置き換えてください。

最初にスキーマAPEXDEVにSQL Property Graphを扱う権限を与えます。

4.1.5 Granting System and Object Privileges for SQL Property Graphs
GRANT CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 
      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 
      READ ANY PROPERTY GRAPH TO APEXDEV;

ユーザーsystemで接続し、スキーマAPEXDEVに権限を与えます。

[oracle@apex ~]$ sqlplus system/********@localhost/freepdb1


SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Fri Apr 7 15:34:54 2023

Version 23.2.0.0.0


Copyright (c) 1982, 2023, Oracle.  All rights reserved.


Last Successful login time: Fri Apr 07 2023 15:34:44 +09:00


Connected to:

Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release

Version 23.2.0.0.0


SQL> GRANT CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 

      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 

      READ ANY PROPERTY GRAPH TO APEXDEV;  2    3  


Grant succeeded.


SQL> exit

Disconnected from Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release

Version 23.2.0.0.0

[oracle@apex ~]$ 


元記事ではSQLclでPGQLを使用するために、色々な作業を行っています。SQL Property Graphを使う場合は、これらの作業は不要です。

以下のSQLを実行し、頂点であるアカウントとエッジであるトランザクションを保存する表を作成します。表SQLCL_BANK_ACCTS、SQLCL_BANK_TXNSは元記事とまったく同じ表です。



作成した表にテスト・データを投入するために、ユーティリティデータ・ジェネレータを使用します。

データ・ジェネレータでの作業も元記事とまったく同じです。同じ手順を記載するのは冗長になるため、テスト・データの準備については元記事を参照してください。


データ・ジェネレータによるテスト・データの投入が完了したところから継続します。

SQLコマンドより、表SQLCL_BANK_ACCTSに投入されたデータを確認します。

select count(*) from sqlcl_bank_accts;


SQLCL_BANK_TXNSに投入されたデータを確認します。

select count(*) from sqlcl_bank_txns;


テスト・データより、送金元と送金先が同じ行を削除します。

delete from sqlcl_bank_txns where from_acct_id = to_acct_id;


以上でテスト・データの準備が完了しました。

この表を元にプロパティ・グラフSQLCL_BANK_GRAPHを作成します。



元記事で作成したAPEXアプリケーションをインポートします。
https://github.com/ujnak/apexapps/blob/master/exports/pgql-reports.zip

インポートしたアプリケーションを編集します。

ページ番号2のPGQL1のレポートのソースを以下に変更します。
select acct_id, count(*) as NumDeposits
from graph_table(sqlcl_bank_graph
    match
    (m is account) -[e is transfer] ->(v is account)
    columns (v.acct_id)
)
group by acct_id
order by NumDeposits desc
fetch first :P2_ROWS rows only;

ページを実行すると、以下のように表示されます。


PGQLより生成したSQLをSQL/PGQを使うように置き換えます。マニュアルの主な参照箇所は以下になります。

5 SQL GRAPH_TABLE Queries

ページ番号3のPGQL2のレポートのソースは、以下に変更します。
select from_acct_id, amount, to_acct_id, description
from graph_table(sqlcl_bank_graph
    match
    (s is account where s.acct_id member of apex_string.split_numbers(:P3_ACCT_IDS,',')) -[e is transfer]->(d is account)
    columns (s.acct_id as from_acct_id, e.amount as amount, d.acct_id as to_acct_id, e.description as description)
);

ページを実行すると、以下のように表示されます。


 PGQLからSQLを生成してレポートに組み込むより、はるかに簡単にグラフ構造のデータを活用できるようになっています。

現時点(バージョン22.2)のOracle APEXには、グラフを描画する標準のコンポーネントはありません。地理空間情報に対応しているマップ・リージョンのように、グラフ構造のデータについても専用のリージョンが提供されると、もっとグラフの使い勝手が良くなることが期待されます。

今回の変更を加えたAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sqlpgq-report.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

Oracle AI Database 26ai Free VirtualBox ApplianceでOracle APEXを使う

更新: 2026年1月30日

Oracle AI Database 26ai Freeは、VirutalBoxの仮想マシンとしても提供されています。

ダウンロード

以下が概要になります。
  • Oracle Linux 8.10
  • Oracle AI Database 23.26
  • Oracle REST Data Services 25.3
  • Oracle SQLcl 25.3
  • Oracle APEX 24.2
  • JDK 21.0.5
上記の仮想マシンをダウンロードした後、VirtualBox(今回使用したバージョンは7.2.4)にインポートして起動し、Oracle APEXの使い勝手を確認してみました。x86_64しかないため、ARMに移行しているMacユーザーは利用できません。また、残念なことにAPEXは日本語化されていませんでした。

以下より、日本語リソースをロードする方法を紹介します。手順自体は、一般的なOracle APEXの言語リソースのロード作業です。

ダウンロードしたOracle_AI_Database_26ai_Free.ovaをVirtualBoxにインポートした直後の状態から作業を始めます。

インポートした仮想マシンを起動すると、データベースとORDSも同時に起動します。ディスプレイ表示倍率を上げると、コンソールが広くなります。


ターミナルも開きますが、私の環境ではキーマップが異なり、この画面のターミナルからの作業は今ひとつでした。コンソールの外からコピぺもできません。


ネットワークポートフォワーディングの設定を確認すると、sshのポートがホストの2223に割り当てられています。


なので、ローカルのマシンのターミナルからSSHで接続し、作業をすることにします。

ssh -p 2223 oracle@localhost

~ % ssh -p 2223 oracle@localhost         

The authenticity of host '[localhost]:2223 ([127.0.0.1]:2223)' can't be established.

ED25519 key fingerprint is SHA256:KAd6f3AsAB7inP+X63xYLJWQckmqPyORYKDipVgSPCk.

This key is not known by any other names.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '[localhost]:2223' (ED25519) to the list of known hosts.

oracle@localhost's password: ********

Activate the web console with: systemctl enable --now cockpit.socket


Last login: Fri Jan 30 01:44:23 2026

[oracle@localhost ~]$ 


仮想マシンにはOracle APEXの言語リソースが含まれていません(/home/oracle/apex以下にbuilderが含まれていない)。インストールされているOracle APEXのバージョンは24.2であるため、以下のリンクより日本語リソースを含んだアーカイブをダウンロードします。

mkdir temp
cd temp
curl -OL https://download.oracle.com/otn_software/apex/apex_24.2.zip

[oracle@localhost ~]$ mkdir temp

[oracle@localhost ~]$ cd temp

[oracle@localhost temp]$ curl -OL https://download.oracle.com/otn_software/apex/apex_24.2.zip

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  289M  100  289M    0     0  6443k      0  0:00:45  0:00:45 --:--:-- 5718k

[oracle@localhost temp]$ 


ダウンロードしたapex_24.2.zipを解凍します。

unzip -q apex_24.2.zip
ls apex

[oracle@localhost temp]$ unzip -q apex_24.2.zip 

[oracle@localhost temp]$ ls apex

LICENSE.txt                 apxdevrm_cdb.sql    apxrtins_cdb.sql

apex_rest_config.sql        apxdevrm_nocdb.sql  apxrtins_nocdb.sql

apex_rest_config_cdb.sql    apxdvins.sql        apxsilentins.sql

apex_rest_config_core.sql   apxdvins_cdb.sql    builder

apex_rest_config_nocdb.sql  apxdvins_nocdb.sql  core

apexins.sql                 apxdwngrd.sql       coreins.sql

apexins1.sql                apxpatch.sql        coreins2.sql

apexins2.sql                apxpatch_cdb.sql    coreins3.sql

apexins3.sql                apxpatch_nocdb.sql  coreins4.sql

apexins_adb.sql             apxremov.sql        coreins5.sql

apexins_adb_ext.sql         apxremov1.sql       dbcsconf.sql

apexins_cdb.sql             apxremov2.sql       dbcsins.sql

apexins_nocdb.sql           apxremov_cdb.sql    devins.sql

appins.sql                  apxremov_nocdb.sql  images

apxappcon.sql               apxrtins.sql        load_trans.sql

apxappcon_ext.sql           apxrtins1.sql       utilities

apxchpwd.sql                apxrtins2.sql

apxdevrm.sql                apxrtins3.sql

[oracle@localhost temp]$ 


日本語リソースをロードします。

cd apex
. oraenv   (ORACLE_SIDとしてFREEを指定)
export NLS_LANG=American_America.AL32UTF8
sqlplus sys/******@localhost/freepdb1 as sysdba
@load_trans JAPANESE

[oracle@localhost temp]$ cd apex

[oracle@localhost apex]$ . oraenv

ORACLE_SID = [oracle] ? FREE

The Oracle base has been set to /opt/oracle

[oracle@localhost apex]$ export NLS_LANG=American_America.AL32UTF8

[oracle@localhost apex]$ sqlplus sys/********@localhost/freepdb1 as sysdba


SQL*Plus: Release 23.26.0.0.0 - Production on Fri Jan 30 01:59:08 2026

Version 23.26.0.0.0


Copyright (c) 1982, 2025, Oracle.  All rights reserved.



Connected to:

Oracle AI Database 26ai Free Release 23.26.0.0.0 - Develop, Learn, and Run for Free

Version 23.26.0.0.0


SQL> @load_trans JAPANESE


PL/SQL procedure successfully completed.


Installing Oracle APEX translation - JAPANESE


. ORACLE

.

. Oracle APEX Hosted Development Service Installation.

..............................................................


PL/SQL procedure successfully completed.



PL/SQL procedure successfully completed.


--application/set_environment

API Last Extended:20241130

Your Current Version:20241130

This import is compatible with version: 20241130

COMPATIBLE (You should be able to run this import without issues.)

ID offset during import: 0

New ID offset for application: 0

APPLICATION 4420 - Oracle APEX Builder, Wizard Messages and Native Plug-Ins

--application/delete_application

--application/create_application

--application/user_interfaces


[中略]


--application/deployment/definition

--application/deployment/checks

--application/deployment/buildoptions

--application/end_environment

... elapsed: 5.87 sec

...done

Adjust instance settings


PL/SQL procedure successfully completed.


SQL> 


プロンプトが返ってきた時点で日本語リソースの導入は完了しています。

APEXの管理サービスには、以下のURLからアクセスできます。


日本語リソースを導入しているため、言語として日本語を選択できます。管理者のユーザー名はADMINです。パスワードは仮想マシンのコンソールで開いているWebページまたはターミナルに記載されています。


管理にサインインできます。


APEXのワークスペースとして、HR_DEVが作成済みです。ユーザーHR_ADMINでサインインできます。パスワードは仮想マシンのコンソールで開いているWebページまたはターミナルに記載されています。



APEXのアプリケーション・ビルダーが開きます。


データベース・アクション(SQL Developer Web)への接続も確認します。

http://localhost:8080/ords/sql-developer

詳細をクリックし、パス指定を開きます。

SQL Developer Webでは、ユーザーHRがあらかじめ作成されています。パスhrユーザー名hrにてサインインできます。


SQL Developer Webが開きます。


以上で、Oracle APEXのアプリケーションを開発する準備ができました。