1

いくつかの手順を含むパッケージに取り組んでいますが、少し問題が発生しています。ガロンをリットルに変換する手順やその他の手順をテストしようとすると、数値を変換する代わりに、名前のないブロックで宣言された内容が出力されるだけです。何か案は?

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; 
/ 

 
4

2 に答える 2

4

それ以外の

IF gal = NULL THEN

あなたが必要

IF gal IS NULL
于 2009-04-16T00:40:32.713 に答える
0

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

于 2009-04-16T23:58:16.020 に答える