39078


pl/sql 11gを使用しています。超初心者です。  
プロシージャとプロシージャの中にあるfunctionのnull値についてです。  
クラスの登録の簡単なプロシージャを作っています。  
もしクラスのキャパシティにまだ空きがあるかのチェックのfunctionです。

もしクラスの定員に空きがない場合(定員に達している)、nullを返すようにして、nullの場合、'クラスは満員です。登録できません。'と表示します。以下がそのfunctionです。

[code]

    create or replace Function Valid_capacity(
    p_クラス番号 schclasses.クラス番号%type) 
    return varchar2 as
    
    v_count number;
    
    begin 
        select (select sc.クラス番号  
        from enrollments e, schclasses sc
        where e.クラス番号 = sc.クラス番号
        and e.クラス番号 = p_クラス番号
        group by e.クラス番号
        having count(e.学生番号) < (select capacity from schclasses where クラス番号 = p_クラス番号)) 
        into v_count
        from dual; --nullで返したいのでサブクエリ使っています。
    
        if v_count is null then 
            return 'クラスは満員です。登録できません。';　--nullはクラスに空きがないとゆう意味
        else 
            return '登録可能です';
        end if;
    end;
    /
    
[/code]

このfunctionは正常に動きます。（私の試した結果では）  
ですがプロシージャに入れると、funtionが機能していないようです。  
ここから下はプロシージャのbodyの一部です。

[code]

     begin 
             If Valid_capacity(p_クラス番号) is null then
                  DBMS_OUTPUT.PUT_LINE('Cource is NOT Available');
             Else 
                  DBMS_OUTPUT.PUT_LINE('You are enrolled');
          　 end if;
    
     END;
     /
    
[/code]

このプロシージャではnullでもElseの値を返します。  
これはどうゆう意味でしょうか？  
ご教授お願いいたします。


CC BY-SA 3.0
2017-10-27T07:11:39.213
39071
2017-10-28T04:36:16.750
2017-10-28T04:36:16.750
2238
25589
question
sql oracle
プロシージャのnull値、functionのnull値：異なる返り値


Valid_capacityのreturnで返しているのが、「クラスは満員です。登録できません。」という文字列だからだと思います。  
これをnullに変更してみてください。


CC BY-SA 3.0
2017-10-27T11:40:51.653
39078
2017-10-27T11:40:51.653
17014
39071
answer