Forum Stats

  • 3,874,218 Users
  • 2,266,685 Discussions
  • 7,911,771 Comments

Discussions

pl/sql のboolean型を画面に出力したい

859671
859671 Member Posts: 24
edited May 25, 2011 4:56AM in SQLとPL/SQL
お世話になっております。

掲題の通り、pl/sqlブロック内で定義したbooleanを戻すfunctionを作成したいのですが、
boolean型を何とかして、キャラに変換できませんか?

変換関数を探しても見つからず、現在、↓の用にラッパを作っていますが、イマイチ
すっきりしません。直接booleanを変換する方法は無いでしょうか?
ちなみにis_universe()関数はpl/sql内のパッケージからも呼ばれるので戻り値は
出来ればこのままが良いような気がします。それとも、呼び出し側に戻す時の戻り値は
boolean型は使わず、テキストでTRUE/FALSEを返すほうが良いのでしょうか?

①create or repalce function is_universe( pi_code in varchar2 )
is
t_code varchar2;
begin
select code into t_code from test1 where code=pi_code;
if t_code is not null then
return true;
else
return false;
excepion
when others then
return false;
end ;

②create or replace function is_universe_text( pi_code in varchar2)
is
t_ret varchar2;
begin
if is_universe(pi_code) = true then
t_ret := 'TRUE' ;
else
t_ret := 'FALSE';
end ;

Answers

  • tmtsmic
    tmtsmic Member Posts: 120
    こんにちは。

    私だったら無理にbooleanを使用せず

     if t_code is not null then
      return 1;
     else
      return 0;
     excepion
      when others then
       return 9;
     end ;

    みたいに数字でフラグを返しちゃいますが
    true、falseじゃないと問題があるのでしょうか?


    #Oracle Database PL/SQL言語リファレンス 11gリリース2(11.2)
    http://download.oracle.com/docs/cd/E16338_01/appdev.112/b56260/datatypes.htm#CJACJGBG

    上記リンクにもありますけど
    表示させるには別の型に変換が必要なようですね。

    SQLで受け取れなかったり、TO_CHARでも変換が無理だったりするので、
    個人的にはあまりオイシイ使い道が無い感じがします。
  • 859671
    859671 Member Posts: 24
    true、falseじゃないと問題があるのでしょうか?
    いえ、特に無いです。
    pl/sqlにboolean型が定義されていたので使ったほうが
    「ちゃんと」しているのかな、と考えただけです。
    ですが、暗黙の型変換もかからないしなんか使いにくい・・・

    やはりnumberにした方が良いのかな
  • 860993
    860993 Member Posts: 92
    edited May 24, 2011 11:34PM
    pls_Integer型,boolean型などは、
    PL/SQLの中だけで完結しないのであれば、
    number型にするのがよいと思いますよ。

    変換メソッドを作るのも面倒ですし
  • 859671
    859671 Member Posts: 24
    やはり、変換する方法はないのでしょうか?
  • 145973
    145973 Member Posts: 40
    マニュアル『Oracle Database SQL言語リファレンス』に、次のような記述が
    あります。

    ----------------------------------------------------------------------
    Oracle SQLは、ブール値のパラメータまたは戻り値を持つファンクションのコ
    ールをサポートしていません。したがって、ユーザー定義ファンクションが
    SQL文からコールされる場合は、数値(0または1)または文字列('TRUE'また
    は'FALSE')を戻すように設計する必要があります。
    ----------------------------------------------------------------------
    http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/functions256.htm

    これが、今回の問いに対する答えではないでしょうか。
  • 860993
    860993 Member Posts: 92
    edited May 25, 2011 3:18AM
    user6712101 wrote:
    やはり、変換する方法はないのでしょうか?
    Javaのように、勝手にtoStringメソッドを読んでくれるようになる日がくるまでは、
    そうするしかないと思いますね。
  • 859671
    859671 Member Posts: 24
    http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/functions256.htm
    なんと、こんなにはっきりと記述が。。。

    ありがとうございました。
    ブール値を使うのは止めることにします。
This discussion has been closed.