3 Form Builder その他の新機能 Oracle Developer R6.0 新機能 3-1
CONTENTS PL/SQL8 サポート 項目の色 フォントの直接設定 階層ツリー コントロール 戻り値を含む DML 実行時の動作 Forms でのパスワード管理 3-2 ここでは 2 章で触れなかった Form Builder のその他の新機能に付いて紹介します Oracle Developer R6.0 新機能 3-2
PL/SQL8 サポート ストアド プログラム単位 新しい PL/SQL8 機能を使用可能 クライアント側プログラム単位 Oracle8 オブジェクト機能未サポート 3-3 PL/SQL8 サポート Oracle Developer R6.0はクライアントおよびサーバでPL/SQL8を使用します しかし今回のリリースでは クライアント側プログラム単位ではOracle8オブジェクト関連機能を使用出来ません ただしストアド プログラム単位エディタでは Oracle Developer R6.0 では Oracle8 ユーザ定義データ型の本体 ( メソッド ) および仕様 ( 属性 ) の編集が可能なよう 拡張されています 以前のリリースとの互換以前のリリースを用いて作成されたクライアント側プログラム単位は PL/SQL8エンジンと互換性を持たない場合があります この場合 PL/SQL8エンジンで実行は出来ますが コンパイル エラーが発生します PL/SQL8では互換性フラグを使うことによってPL/SQL2との互換性モードを選択できるため サーバーでPL/SQL2コードをコンパイルする際このようなエラーは発生しません 互換性フラグに関しては Oracle8 Server 移行ガイド の第 6 章をご覧ください Oracle Developer R6.0 新機能 3-3
サポート外のクライアント側 PL/SQL8 機能 オブジェクト型 コレクション型 ( ネストした表と VARRAY) オブジェクト値を返すストアド プロシージャ NCHAR NVARCHAR2 型 3-4 サポートしないクライアント側 PL/SQL8 機能 以下の機能は サーバ側 PL/SQL8ではサポートしますが 今回のリリースでは クライアント側 PL/SQL8ではサポートしません オブジェクト型 コレクション型 ( ネストした表 VARRAY) オブジェクト値を返すストアド プロシージャ NCHAR NVARCHAR2 型 これらの機能はサーバ側 PL/SQL8 でサポートするので ストアド ( サーバ側 ) サブプログラムを書き Oracle Developer からサブプログラムを呼び出せばこれらの機能を使用できます ただし上記の制限のために オブジェクト型はクライアント側に渡す前に分解する必要があります Oracle Developer R6.0 新機能 3-4
色 フォントの直接設定 項目の色 フォント フォントの太さ等を SET_ITEM_PROPERTY で直接設定 今までは可視属性を作成し 設定 SET_CAVAS_PROPERTY SET_WINDOW_PROPERTY でも指定可 3-5 項目色 フォント フォントの太さ等をアプリケーション内で変更する際 以前のバージョンでは可視属性を作成して指定する という方法を用いていました この方法ではアプリケーション内で使用する色 フォント 太さを組合せた可視属性をすべて作成しておかなければなりません R6.0では SET_ITEM_PROPERTY ビルトインを用いてこれらのプロパティを直接設定することが可能です 新規に色 フォント等を設定するためのプロパティが追加されています また SET_CANVAS_PROPERTY SET_WINDOW_PROPERTY でもこれらのプロパティを指定出来るので より柔軟に UI を変更出来ます 注 1: フォントサイズを指定する場合は 実際のサイズ 100( サイズ 8 の場合 800) で指定します 注 2: 色を指定する際は RED BLACK 等の色の名前ではなく R0G100B100 のように RGB で指定します 注 3: 色の指定は 99 年 5 月 18 日現在 動作しません Oracle Developer R6.0 新機能 3-5
階層ツリー コントロール データをナビゲータ形式で表示 3-6 EMP 表の階層表示 階層ツリーの作成 階層ツリーは Oracle Developer R6.0 の新しいオブジェクトです 階層ツリーを用いると データをオブジェクト ナビゲータのようなナビゲータ形式で表示する事が可能になります この階層ツリー要素として使用可能な値は 問合せたデータ レコード グループです 階層ツリーの値を操作するビルトイン サブプログラムも合わせて追加されていますので アプリケーション内で動的にツリー要素の変更 追加 削除を行うことが出来ます 階層ツリー項目を作成する際は 以下のどちらかを行います 1. レイアウト エディタで 1 階層ツリー アイコンをクリック 2キャンバス上でマウスをクリック アンド ドラッグし 階層ツリー オブジェクトを作成 3 必要に応じて階層ツリー関連プロパティを設定 2. オブジェクト ナビゲータで 1 作成ボタン使って新しい項目を作成 2 項目のプロパティ パレットをオープンし 項目タイプ プロパティを 階層ツリー に設定 3 必要に応じて他の階層ツリー関連プロパティを設定 Oracle Developer R6.0 新機能 3-6
階層ツリー プロパティ 組込み関数 トリガ プロパティ ビルトイン サブプログラム トリガー SELECT 1, Initial State, Level, ename, Node Label, NULL, Icon Name, empno Node Value FROM emp Table START WITH mgr IS NULL CONNECT BY PRIOR empno=mgr 3-7 階層ツリー特有のプロパティ 階層ツリー用のプロパティとして 以下の7つが設定出来ます - 項目タイプ : 階層ツリーに設定 - 空のブランチを許可 : 子を持たないブランチ ノードの存在を許可するか - 複数選択 : 一度に複数の項目を選択出来るようにするか - 線を表示 : 各ノードをつなぐ線を表示するか - 記号を表示 : 各ブランチ ノードの前に +/- 記号を表示するか -レコード グループ : ツリー要素が格納されるレコード グループ -データ問合せ : ツリー項目のデータロードを行うSQL 問合せ 階層ツリー特有のビルトイン関数ツリー要素の追加 削除等 階層ツリーを操作する新規ビルトインが追加されました これらは FTREEビルトイン パッケージに格納されています 例 ) ツリー項目 BLOCK.TREE_ITEM に値をセット FTREE.POPULATE_TREE('BLOCK.TREE_ITEM'); 階層ツリー特有のトリガー以下の3つのトリガーを用いる事が出来ます WHEN-TREE-NODE-EXPANDED : ノードが拡張または縮小された時に起動 WHEN-TREE-NODE-SELECTED : ノードが選択されたまたは選択から外れた時に起動 WHEN-TREE-NODE-ACTIVATED : ノードが選択された状態でダブルクリックまたは Enter キーを押した時に起動 Oracle Developer R6.0 新機能 3-7
DML の戻り値 挿入および更新用の新しい DML 機能 2 回目のデータベース問合せを不要にする 処理速度の向上 DML 戻り値 プロパティによる制御 3-8 挿入値または更新値を返す Oracle8 構文のインプリメント Forms アプリケーションでデータの挿入 更新を行う際に 新しいDML 機能を使用することが出来ます データの挿入 更新時に データベース側のトリガー (Before Insertトリガー等 ) で値が変更される場合があります このような場合に 再度アプリケーション側から問合せすることなく自動的に新しい値を取得することが可能になりました この動作の設定は ブロックの新しいプロパティ DML の戻り値 で指定します この値が はい に設定されている場合 Forms は DML Returning 句を用いてアプリケーションに自動的に変更を反映します いいえ と設定されている場合は 以前のバージョンと同じように再度問合せを行わない限り変更をアプリケーションに反映しません よってユーザが サーバ側では値の変更されているデータをそのまま更新しようとすると 再度問合せを実行するよう促すエラーが発生します この いいえ は以前のバージョンとの互換性を保つために設置されています 注 1: この機能はデータベース サーバが Oracle8 の場合のみ使用出来ます それ以外のサーバを使用する場合 このプロパティは無視されます 注 2:R6.0 では DELETE 文に対しては動作しません Oracle Developer R6.0 新機能 3-8
以下に DML 戻り値プロパティの動作を確認する例を示します 1 Oracle8データベース上に下記スクリプトを流し 表 データ 及び表の更新時に起動する before update トリガーを作成します 2 作成した表 (emp_tab2) を基にしたブロックを Form Builderで作成します 3ブロックの DML 戻り値 プロパティを はい に設定し 実行します 4Runtime 上で1 行目の値を変更し 保存します 5データベース上のトリガーが働き 今変更した行のデータが自動的に更新されたことを確認して下さい 6 今度は DML 戻り値 プロパティを いいえ に設定し 実行 更新してみて下さい 7データはユーザが入力したままの状態です 8 今更新したデータを再び更新します 9 検索を促すエラーが発生しました drop table emp_tab2 / drop type emp_type2 / /* emp_type2 ユーザ定義型作成 */ create type emp_type2 as object ( empno ename job salary comm hiredate ); / /* emp_tab2 オブジェクト表を作成 */ create table emp_tab2 of emp_type2; / number(4), varchar2(10), char(9), number(7,2), number(7,2), date /* データ 2 件挿入 */ insert into emp_tab2 (empno,ename,job,salary,comm,hiredate) values (10,'John','job1',200,10,'98-10-20'); insert into emp_tab2 (empno,ename,job,salary,comm,hiredate) values (20,'Bill','job2',300,20,'98-11-20'); commit; /* emp_tab2 表のデータを更新する際に起動する before update トリガー作成 / どんな値に更新しようとしても このトリガーにより ENAME=ORACLE JOB=SALES SALARY=10000 / に設定される */ create or replace trigger emp_tab2_update before update on emp_tab2 for each row begin :new.ename := 'ORACLE'; :new.job := 'SALE'; :new.salary := 10000; :new.hiredate := '99-01-01'; end; / Oracle Developer R6.0 新機能 3-9
パスワード管理 期限切れのパスワードを Forms 上で変更 3-10 パスワードの管理 Oracle8にはデータベース管理者が使用出来る パスワードの失効機能が用意されています これはユーザに一定の基準でパスワードの更新を促すためのものです Oracle Developerの以前のバージョンでは パスワードが期限切れになったユーザで接続を行おうとした場合 ORA-28001:the password has expired というエラーメッセージが表示され そのユーザでは接続する事が出来ませんでした R6.0ではパスワードが期限切れになったユーザで Form Builder Forms Runtimeからの接続を行う際 パスワード変更を促すダイアログが表示されますので Formsアプリケーション上でパスワード変更を行う事が出来ます パスワード変更時にはデータベース上に設定してあるパスワード認証ルーチンが働きますので 文字数制限 使用文字制限等を反映させた変更が Forms 上で正しく行われます 注 1: R6.0 では このパスワード管理機能は Forms のみで提供されています Reports Graphics 等 Forms 以外のコンポーネントではご使用頂けません 注 2: 不具合により 現在この機能を用いてパスワードを変更する事は出来ません 例 ) パスワード有効期限の切れたユーザのパスワードを Forms から変更します 1 SQL*Plus 等を用い Systemまたは同等のユーザでデータベースに接続します 2 以下のように入力します なおusernameには パスワードを期限切れにしたいユーザ名を入力します SQL>ALTER USER username PASSWORD EXPIRE; 3 Form BuilderまたはForms Runtimeを起動して表示し 2で設定したユーザでデータベースに接続します 4 ORA-28001:the password has expired というエラーが出ます OKを押して下さい 5 パスワード変更ダイアログが表示されます パスワードの変更を行って下さい Oracle Developer R6.0 新機能 3-10
実行時の診断 実行時の情報収集を行う デバッグに効果的 3-11 Forms Runtime 診断 Forms Runtime 診断とは Forms Runtime のログを取るシステムを言います この機能を使用してアプリケーションを実行すると Forms で行われた処理がログファイルに書き込まれます 収集出来るのは以下の情報です 実行時に使用されたコンポーネント名及びバージョン オープンされたファイル メッセージ 項目の状態 実行されたビルトイン トリガー 実行時の外部ユーザ イベント 未処理の例外 診断の開始 Runtimeの診断は コマンドライン実行で RECORD パラメータに COLLECT を指定することにより実行されます 例 : ifrun60 module=empdept.fmx userid=scott/tiger@mydb RECORD=COLLECT これで 現行ディレクトリに collect_<id> という名前のログファイルが生成されます このログファイルの名前を指定する際は LOG パラメータで指定します 例 :ifrun60 : module=empdept.fmx userid=scott/tiger@mydb RECORD=COLLECT LOG=mylog.log Oracle Developer R6.0 新機能 3-11
まとめ PL/SQL8 使用 色 フォントの直接設定が可能 階層ツリー コントロール表示 戻り値を持つ DML 実行時の動作対応 Oracle8 パスワード管理機能対応 3-12 Oracle Developer R6.0 新機能 3-12