2009-04-16 8 views
1

パッケージにいくつかのプロシージャが含まれているため、少し問題があります。ガロンをリットルまたは他の手続きに変換する手続きをテストしようとすると、数値を変換する代わりに名前のないブロックで宣言されたものが表示されます。何か案は?PL/SQL:プロシージャがパッケージ内で正しく機能しない

CREATE OR REPLACE PACKAGE eng_metric 
IS 
    PROCEDURE convert(degree_fahrenheit IN OUT NUMBER,degree_celsius IN OUT NUMBER,measure IN VARCHAR2); 

    PROCEDURE convert(liters IN OUT NUMBER,gallons IN OUT NUMBER); 
END eng_metric; 
/

CREATE OR REPLACE PACKAGE BODY eng_metric 
AS 
    PROCEDURE Convert 
     (degree_fahrenheit IN OUT NUMBER, 
     degree_celsius  IN OUT NUMBER, 
     measure   IN VARCHAR2) 
    IS 
    df   NUMBER; 
    dc   NUMBER; 
    convertf NUMBER; 
    measurecf VARCHAR2(4); 
    BEGIN 
    measurecf := measure; 

    df := degree_fahrenheit; 

    dc := degree_celsius; 

    IF measure = 'TEMP' THEN 
     IF dc = NULL THEN 
     convertf := ((df - 32) * .56); 

     degree_fahrenheit := convertf; 

     dbms_output.Put_line('The temperature in fahrenheit is ' 
          ||To_char(degree_fahrenheit)); 
     ELSIF df = NULL THEN 
     convertf := (dc + 17.98) * 1.8; 

     degree_celsius := convertf; 
     END IF; 
    ELSE 
     dbms_output.Put_line('Invalid measure'); 
    END IF; 
    END convert; 

    PROCEDURE Convert 
     (liters IN OUT NUMBER, 
     gallons IN OUT NUMBER) 
    IS 
    lit  NUMBER; 
    gal  NUMBER; 
    convertlg NUMBER; 
    BEGIN 
    lit := liters; 

    gal := gallons; 

    IF gal = NULL THEN 
     convertlg := (lit/3.785); 

     liters := convertlg; 
    ELSIF lit = NULL THEN 
     convertlg := (gal * 3.785); 

     gallons := convertlg; 
    END IF; 
    END convert; 
END eng_metric; 
/

DECLARE 
    liters NUMBER := 25; 
    gallons NUMBER := 41; 
    nully NUMBER := NULL; 
BEGIN 
    eng_metric.Convert(nully,gallons); 

    dbms_output.Put_line(To_char(gallons)); 
END; 
/

答えて

5

代わりの

IF gal = NULL THEN 

あなたは

IF gal IS NULL 
+0

この問題を抱えるヌルチェックが多数あります – ninesided

0

が必要なもの、あなたが覚えていることはNULLは "無価値" を意味しないということです。それは、NULLを含む何らかのものと等しくなくてはなりません。したがって、IS NULLまたはIS NOT NULLを使用するか、NVL関数を使用してnullを値を持つものに変更する必要があります。

関連する問題