- PR -

変数宣言時に、%TYPEで参照した属性の桁数を取得したい(PL/SQL)

1
投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2009-01-15 23:44
お世話になっております。

wk_a IN USER.USERID%TYPE;
↑USERIDの属性がVARCHAR2(5)だったとして、
変数wk_aから最大桁数(この場合5)を取得する方法はあるでしょうか?
wk_aの中身が'a01'でも'abc01'でも、5を取得できるようにしたいです。

イメージとしては、 LENGTH(USER.USERID%TYPE) のようなものです。
ご存じの方がいましたら教えてください。

wk_a := SUBSTR( wk_bb, 1, [wk_aの最大桁数] );
         ↑ wk_bbの桁数が不定なので、SUBSTRで加工する

[ メッセージ編集済み 編集者: みゅう 編集日時 2009-01-16 01:41 ]
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2009-01-16 08:43
こんな感じで何とかなりませんか?
コード:
Loop
   Begin
       wk_aa := wk_bb;
       Exit;
    Exception
       When VALUE_ERROR
         wk_bb := SUBSTR(wk_bb, LENGTH(wk_bb -1));
    End;
End Loop;


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-16 09:27
その型は全ての型が想定されますか?(DATE、NUMBER、BLOB等)
それとも VARCHAR2 の場合のみですか?
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2009-01-17 00:09
お世話になります。

型はVARCHAR2のみ、桁数は1〜12くらいです。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-17 00:29
コード:
DECLARE
    wk_a USER.USERID%TYPE;
    wk   VARCHAR2(4000);
    len  NUMBER(4);
BEGIN
    wk := wk_a;

    BEGIN
        LOOP
            wk_a := wk_a || ' ';
        END LOOP;
    EXCEPTION
        WHEN OTHERS THEN
            NULL;
    END;

    len := LENGTH(wk_a);

    wk_a := wk;
END;


てな感じで出来ませんか?
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2009-01-19 12:09
こんな方法もありますよ。

SELECT DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'USER' AND COLUMN_NAME = 'USERID'

DATA_LENGTHはNUMBER型で取得できたはず。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-19 12:26
KOXさん

「カラム名から」ではなく「変数から」ではないでしょうか?
カラム名は分かっているけどデータ長がわからない状態、
というレベルなのか
カラム名すらわかっておらず変数がただあるだけの状態、
のレベルなのかが不明なので強くは言えませんが・・・。
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2009-01-24 01:02
変数からでもUSER_TAB_COLUMNSテーブルからでも、どちらでも構いません。
参考にさせていただきます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)