なんとか引数のサイズを指定できないものかと思い、
資料を読んでいると「サブタイプ」なるものを発見!!
これはイケルと思い試してみました。

テスト用パッケージ仕様部のソース

create or replace PACKAGE "TEST" IS
 SUBTYPE varchar2SubType IS VARCHAR2(8);
 
 FUNCTION SUBTYPE_TEST
 (
   inParameter IN varchar2SubType
 )
 RETURN NUMBER;
  
 PROCEDURE TM_SUBTYPE_TEST;
 
END "TEST";

テストパッケージ本体部のソース

create or replace PACKAGE BODY "TEST" IS
FUNCTION SUBTYPE_TEST
(
   inParameter IN varchar2SubType
)
RETURN NUMBER
IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('SUBTYPE_TEST' || inParameter);
  RETURN 0;
END;
 
PROCEDURE TM_SUBTYPE_TEST
IS
 ret NUMBER(1);
BEGIN
  ret := TEST.SUBTYPE_TEST('12345678901234567890');
END;
 
END "TEST";


んで、テストプロシージャ「TM_SUBTYPE_TEST」の実行結果(DBMS_OUTPUTの値)がこれ
SUBTYPE_TEST12345678901234567890
8桁以上受け付けてるじゃないですか・・・
絶望しましたorz

フィードバック

# re: [PL/SQL]プロシージャ引数に引数のサイズを指定できない2

2007/07/23 15:30 by 黒龍
ん~いまいちわかって無いんですが呼び出し側のPartialでチェックとかはやっぱし面倒?

# re: [PL/SQL]プロシージャ引数に引数のサイズを指定できない2

2007/07/23 15:42 by 黒龍
一応補足するとストアドの呼び出しであればパラメータチェックや戻り値の設定の為にpartialを書くだろうからという前提からです。
(デフォだと引数がint?になっちゃうからとか戻り値がパラメータからの詰め替えが必要などのアレです)

# re: [PL/SQL]プロシージャ引数に引数のサイズを指定できない2

2007/07/23 17:20 by karua
引数がサイズを持っているって、それより大きな物を渡された場合どういう副作用を期待しているかってことですね。
エラー?切り落とす?どっちにせよ、副作用に期待せずにチェックや処理をしたほうがいい気もします。

# re: [PL/SQL]プロシージャ引数に引数のサイズを指定できない2

2007/07/24 9:34 by 十郎
>黒龍様
ありがとうございます。
エントリの仕方がまずかったです。
すみません。
実際の開発で別に困ってないんです^^
ご指摘の通り、
呼び出し側(あるいはプロシージャ側)でチェックするだけの話なので。

できれば便利だよねぇって話をしてて、
気になったもので・・・

>karua様
ありがとうございます。
ご指摘の通りです。
使う前にチェックしとくのが礼儀だと思います^^




サブタイプについては、使う上で覚えていないと
間違って使っちゃいそうな所があったので、
後日まとめてUPしようと思います。
コメントの入力
タイトル
 
名前
 
Url
コメント