2016-12-11 8 views
0

EDIT: ソートしたようですが、テーブルの挿入に問題があったと思います。PL/SQLのブロック機能とテスト

私はPL/SQLの初心者ですので、私は簡単ですが、私はこのコードを書いています。ここで私は本のカテゴリをチェックしなければなりません。行を挿入します。誰かがこれに間違っていることを教えてもらえますか?ありがとう。この関数は正しく実行されますが、構文が正しいことと、エラーを出しているテストだけが完全ではないことがよく分かりません。

CREATE OR REPLACE FUNCTION CheckBookType (
    p_Type titles.category%TYPE) 
    RETURN BOOLEAN IS 

    v_ReturnValue  BOOLEAN; 
BEGIN 

    IF (p_Type) = 'business' THEN 
    v_ReturnValue := TRUE; 
    ELSIF (p_Type) = 'psychology' THEN 
    v_ReturnValue := TRUE; 
    ELSIF (p_Type) = 'mod_cook' THEN 
    v_ReturnValue := TRUE; 
    ELSIF (p_Type) = 'trad_cook' THEN 
    v_ReturnValue := TRUE; 
    ELSIF (p_Type) = 'popular_comp' THEN 
    v_ReturnValue := TRUE; 
    ELSE 
    v_ReturnValue := FALSE; 
    END IF; 

    RETURN v_ReturnValue; 
END CheckBookType; 

set serveroutput on; 
BEGIN 
    IF(CheckBookType('psychology'))=true THEN 
    INSERT INTO Titles VALUES(1234, 'test', 'psychology', sysdate, 1234); 
    ELSE 
    dbms_output.put_line('Invalid'); 
    END IF; 
END; 

答えて

0

私はあなたがすでにこれを解決したことを知っており、それは良いことです。しかし、ここであなたのIFステートメントのための別の提案があります。 TRUEにv_ReturnValueを設定すると、あなたがIF文でやっているすべてをである場合は、次のように、あなたは大幅に短縮することができます。

v_ReturnValue := FALSE; -- Or better yet, initialize it to FALSE in the declaration 
IF p_Type IN ('business', 'psychology', 'mod_cook', 'trad_cook', 'popular_comp') THEN 
    v_ReturnValue := TRUE; 
END IF; 

いくつかの点であなたがするだけで設定v_ReturnValue以上のことをする必要がある場合は、これに欠点はありますp_Typeの値のうちのいくつかだけがTRUEであれば、IF文を再度展開する必要があります。一方、これはかなり短く、v_ReturnValueをTRUEにするp_Typeの値を追加または削除する方が簡単です。

0

一見するとわかりました。私は両方のSQLおよびPL/SQLで使用することができCASE statement before、について書いてきた

CASE p_Type 
    WHEN 'business' THEN v_ReturnValue := TRUE; 
    WHEN 'psychology' THEN v_ReturnValue := TRUE; 
    WHEN 'mod_cook' THEN v_ReturnValue := TRUE; 
    WHEN 'trad_cook' THEN v_ReturnValue := TRUE; 
    WHEN 'popular_comp' THEN v_ReturnValue := TRUE; 
    ELSE v_ReturnValue := FALSE; 
END CASE 

: はしかし、私は、CASE文の代わりに、複数のIF-THEN-ELSE文を使用してお勧めします。

+0

ええ、すべてが大丈夫です。私はテーブルで何かを並べ替える必要がありました。 – Annihil8

+0

偉大な、あなたがそれを解決してうれしい! – bbrumm

関連する問題