2009年10月15日木曜日

昔やったPL/SQL案件での命名規則とお約束事項メモ

共通ルール
 ■名前をつける時は、名前をつけようとするものの役割が分かるようなものにすること。
 ※意味が分からない名前は禁止。但しループカウンタに使用するi、j、kは例外
 ex.str1,data…etc.
 ■名前は日本語のローマ字表記を使用すること。但し、英語が一般的なものは英語を使うこと。
 ex.住所…jusho、コード…code、マスタ…master
 ■単語と単語を接続する場合は、後ろの単語の先頭の文字を大文字にする。
 ex.住所コード…jushoCode
 例外.定数
 ■変数のプレフィックスは任意
 例外.カーソル、レコードセット、ロータイプ
 ■変数名は30バイト以内とする。
 ※オラクル10gの限界!!
 ■パッケージを使用しカプセル化する事
 意味のわからない人はコードを書くな!!勉強して理解したうえでコードを書こう!!
 □Oracleの予約語については全て大文字とする(但し、テーブル名や項目名等は除く)
 ex.SELECT、FROM、WHERE、UPDATE、GROUP BY、AS
 □タブインデントをつける(1タブ=半角スペース4つ)
 □例外処理を必ず実装
 □「SELECT * ~」を使用せず、必ず取得項目を列挙すること
  例)×:SELECT * FROM hoge;
       ○:SELECT ho, ge FROM hoge;
 □INSERT文で列の指定を省略しない
  例)×:INSERT INTO hoge (123, 'あいう');
    ○:INSERT INTO hoge (ho, ge) VALUES (123, 'あいう');
 □WHERE句の左辺に関数を使用しない
  例)×:SELECT ge FROM hoge WHERE TO_CHAR(ho) = '123' ;
    ○:SELECT ge FROM hoge WHERE ho = TO_NUMBER('123') ;

定数
 ■定数はすべて大文字とし、単語と単語を接続する場合は_を使用する。

ファンクション、カーソル、レコードセット
 □ファンクションやカーソルやレコードセットの先頭はタイプが分かりやすいようにタイプを設定する。
 ex.ファンクション:Func_[ファンクション名]
    プロシージャ :Proc_[プロシージャ名]
    パッケージ  :Pkg_[パッケージ名]
    カーソル   :cur_[カーソル名]
    レコードセット:rs_[レコードセット名]
    ロータイプ  :rec_[ロータイプ名]
※ 上の3つはやらなくても良い気が・・・

パッケージ作成単位
 □原則、機能仕様書の1シートにつき1パッケージ、1ファイルとする。
 例)機能仕様書:機能仕様書_経費データ管理.xls
  ○シート  :業務量データ属性編集 
   パッケージ: Pkg_Gyoumuryou_Zokusei
   ファイル : Pkg_Gyoumuryou_Zokusei.sql

  ○シート  :業務量データ集約
   パッケージ: Pkg_Gyoumuryou_Shuyaku
   ファイル : Pkg_Gyoumuryou_Shuyaku.sql

            ・
            ・
             
  ※ただし、複数人による同一パッケージの開発が発生する場合には
   この限りではない。(作業のしやすさを優先って感じで)


コメント
 ストアドコメントは以下のように記述する。
-- ------+---------:---------+---------+---------+---------+---------+---------+
-- System          : 原価計算システム
-- Name            : [ストアド物理名]
-- Description     : [ストアド論理名]
-- Author          : ○○○太郎 [作成日]
-- Update          : ○○○太郎 [修正日]
-- Argument Input  : [入力パラメータ名] - [概要]
--                 : [入力パラメータ名] - [概要]
-- Return          : [戻り値]
-- ------+---------:---------+---------+---------+---------+---------+---------+

 ファンクションコメントは以下のように記述する。

-- ------+---------:---------+---------+---------+---------+---------+---------+
-- Description     : [ファンクション物理名]
-- Outline         : [ファンクション論理名]
-- Argument Input  : [入力パラメータ名] - [概要]
--                 : [入力パラメータ名] - [概要]
-- Argument Output : [出力パラメータ名] - [概要]
-- Return          : [戻り値]
-- ------+---------:---------+---------+---------+---------+---------+---------+


 ステートメントコメントは以下のように記述する。
 -- 1行の説明

 ex.
 -- カーソルのオープン(期間資源データテーブルの更新)
 OPEN cur_ckeihi_data;

昔やったAccess案件での命名規則とお約束事項めも

■ 命名規則とその他お約束事項について

□ テーブル
・マスタ系 : M_~~
・トランザクション系 : T_~~
・ワーク系 : W_~~
※ テーブル・フィールドの説明は必須

□ クエリ
・Q_~~という名称にすること
・説明必須。どこの画面、帳票で使用しているか記載すること

□ フォーム
・F_~~という名称にすること
・サブフォームは親フォーム名称の後ろに_SUBをつけることとする
・説明を記載すること。
マスタ系の画面は○を頭につける
トランザクション系の画面は☆を頭につける
共通系の画面は※を頭につける
メニュー系の画面は◎を頭につける
↑SUBフォームの場合には●や★にすること

□ レポート
・R_~~という名称にすること
・サブレポートは親レポート名称の後ろに_SUBをつけることとする
・説明を記載すること。
用紙サイズと縦横を書くこと

□ ページ
・使わないこと。

□ マクロ
・使ったら死刑駄目だよ。可読性が低くなるからやめようね。

□ モジュール
・mod~~という名称
・共通:modCommon。一般的な関数
・ビジネスロジック:modBizLogic。本システムに特化した関数
・グローバル変数:modCon。システム内で使用する変数、定数、構造体、列挙を格納

□ 全般
・オブジェクト名の日本語使用を認める。但し、括弧や記号を使用するとAccessが壊れるのでこれらは使用しないこと
・不要なもの(オブジェクトは作らない)
・一時的にバックアップとして作成するオブジェクトには@マークを名称に含めること
・参照設定をいじったら死刑設定済みなんだからいじらないでね


□ コントロール
・プレフィックスをつけること
txt_:テキストボックス
lbl_:ラベル
chk_:チェックボックス
cmb_:コンボボックス
lst_:リストボックス
opt_:ラジオボタン
grp_:オプショングループ
tgr_:トグルボタン
cmd_:コマンドボタン
img_:イメージボックス
tab_:タブコントロール
sbf_:サブフォーム
sbr_:サブレポート

・コントロール名称をつけること
名称をつけるときにはデータバインドしている物であればデータのコントロールソースとする。
例)顧客名テキストボックス、データバインドしていてコントロールソースが顧客名の場合
⇒ txt_顧客名


※但し、何の制御もしないラベルについてはその対象としない



・コントロールの位置がガタガタにならないようにする
整理するオブジェクトを複数選択し、「メニュー>書式>配置>下にあわす」等を選択しまっすぐにする

・タブ順
TABキーを押下したさいのフォーカス移動順は左から右、上から下に各項目を遷移するようにする

・IME制御
日本語が入るべき箇所は日本語(ひらがな、かたかた等)にする。それいがいはオフにする

・画面サイズ1024×768に収まるようにする
どうしても入らない画面については申告


□ コーディング
・インデントは必ずつけること
・変数名のプレフィックスをつけること
str:String
int:Integer
lng:Long
dt :Date
bln:Boolean
obj:Object
rs :RecordSet
cur:Currency

・Variant型はよっぽどのことが無い限り使わないこと
・""はかならずvbNullStringとすること
・SUBにはCallをつけること
・1モジュール内で4階層以上の深さになる場合には関数化する事。長さが短いモジュールであれば例外も検討。
・1モジュールは2画面に収まる長さとする事。できない場合には関数化すること
・関数・変数には意味のある名前をつけること。日本語は不可とする
但し、i、j、kの3つについてはループカウンタとして用いる場合にはその限りではない
・ByVal、ByRefは必須、変数の省略はアウト、
・1行が長くなり画面に収まらない場合には _ を用いて2行目に書くこと
・定数、列挙、構造体はできる限り使用すること
・変数、関数のスコープ(範囲)は最小にすること
但し、明確な理由がある場合にはその限りではない
・Round関数は使用してはならない。一般的な四捨五入ではないため

PL/SQLでRAISE_APPLICATION_ERRORを使う

DECLARE
 hoge NUMBER;
BEGIN
  DBMS_OUTPUT.PUT_LINE('1');
  RAISE_APPLICATION_ERROR(-20001, 'User Error');
  DBMS_OUTPUT.PUT_LINE('2');
EXCEPTION
WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

RAISE_APPLICATION_ERRORで例外に飛ぶ。
SQLERRMはパラメータに渡された値となる。

ユーザが利用可能なエラー番号の範囲は【-20000 ~ -20999】。

PL/SQLでPRAGMAを使う

DECLARE
 user_exp EXCEPTION;
 PRAGMA EXCEPTION_INIT(user_exp, -20001);
BEGIN
 DBMS_OUTPUT.PUT_LINE('1');
 RAISE user_exp;
 DBMS_OUTPUT.PUT_LINE('2');
EXCEPTION
 WHEN user_exp THEN
 DBMS_OUTPUT.PUT_LINE(SQLERRM);
 WHEN OTHERS THEN
 DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

RAISEで指定したuser_expに飛ぶ。
エラーコードのみ返す形になる。


PL/SQLで自律型トランザクションを使う

CREATE PROCEDURE hoge IS
BEGIN
 INSERT INTO yyy ・・・ ;
 hoge2();
 ROLLBACK;
END;
/

CREATE PROCEDURE hoge2 IS
 PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
 INSERT INTO xxx ・・・ ;
 COMMIT;
END;
/

yyyへのInsertはRollbackされるが
xxxへのInsertはCommitされる。

ロールバックをした際に取り消されたくない処理がある場合に
その処理を関数化した上で自律型トランザクションを使えばOK。

2009年10月14日水曜日

PL/SQLでRAISEを使う

DECLARE
 hoge NUMBER;
BEGIN
  DBMS_OUTPUT.PUT_LINE('1')

 BEGIN
  DBMS_OUTPUT.PUT_LINE('2')
  RAISE ;
  DBMS_OUTPUT.PUT_LINE('3')
 END;

  DBMS_OUTPUT.PUT_LINE('4')
EXCEPTION
WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLERRM)
END;
/

入れ子内のRAISEで親の例外に飛ぶため3と4は表示されない。

2009年10月8日木曜日

EeePCの不要ファイル削除

初代EeePCのSSDは4GBしか無いため極力不要ファイルを消す。
WindowsXP SP3 インストール後の残容量157MBからどのくらいまで削減できる???

・仮想メモリOFF
 マイコンピュータ>プロパティ> パフォーマンス>設定>詳細設定>仮想メモリ>変更>ページングファイルなし

・システムの復元を最低に

 マイコンピュータ>プロパティ>システムの復元>最小

・WIndowsUpdateの残骸を削除
 C:\WINDOWS\SoftwareDistribution\Download の中のファイルを削除

・WindowsUpdateのアンインストールのためのファイルを削除

 C:\WINDOWS\ $始まりのファイルを削除
 ※アンインストールしない覚悟がある場合のみ

・ドライバファイルの圧縮
 C:\WINDOWS\inf のフォルダ>プロパティ>詳細設定>内容を圧縮してディスクを節約をON

 70MB→ 24MB 程度になる


参照元