PL/SQL Oracle Referenz auf die nicht initialisierte composite

CREATE OR REPLACE TYPE gma_trg_eval AS OBJECT (
v_id NUMBER, 
v_year NUMBER, 
v_max_id NUMBER, 
v_min_id NUMBER, 
v_max_year NUMBER, 
v_min_year NUMBER);

CREATE OR REPLACE TYPE gma_trg_eval_table AS TABLE OF gma_trg_eval;

CREATE OR REPLACE FUNCTION gma_trg_test (v_p NUMBER, v_y NUMBER)
    RETURN gma_trg_eval_table PIPELINED 
IS
    v_r gma_trg_eval;
BEGIN
    SELECT MAX (id), MIN (id)
      INTO v_r.v_max_id, v_r.v_min_id
      FROM gma_trg_time_periods
     WHERE year_id = v_y;

    SELECT MAX (year_id), MIN (year_id)
      INTO v_r.v_max_year, v_r.v_min_year
      FROM gma_trg_time_periods;

    SELECT year_id, id
      INTO v_r.v_year, v_r.v_id
      FROM gma_trg_time_periods
     WHERE period = v_p AND year_id = v_y;

    IF v_r.v_year = v_r.v_min_year AND v_r.v_id = v_r.v_min_id
    THEN
        gma_msg.exit_with_message ('GMA-02006');
    END IF;

    DBMS_OUTPUT.put_line ('Min = ' || v_r.v_min_id);
    DBMS_OUTPUT.put_line ('Max = ' || v_r.v_max_id);
    DBMS_OUTPUT.put_line ('Current year = ' || v_r.v_year);
    DBMS_OUTPUT.put_line ('Current period = ' || v_r.v_id);
    DBMS_OUTPUT.put_line ('Min year = ' || v_r.v_min_year);
    DBMS_OUTPUT.put_line ('Max year = ' || v_r.v_max_year);

    IF v_r.v_year >= v_r.v_min_year AND v_r.v_year <= v_r.v_max_year
    THEN
        IF v_r.v_id = v_r.v_min_id
        THEN
            v_r.v_year := v_r.v_year - 1;
            DBMS_OUTPUT.put_line ('Year changed to:' || ' ' || v_r.v_year);
            v_r.v_id := v_r.v_max_id;
            PIPE ROW (v_r);
        ELSE
            v_r.v_id := v_r.v_id - 1;
            PIPE ROW (v_r);
        END IF;

        DBMS_OUTPUT.put_line ('Period changed to:' || ' ' || v_r.v_id);

        IF v_r.v_id = v_r.v_min_id AND v_r.v_year = v_r.v_min_year
        THEN
            DBMS_OUTPUT.put_line ('Button is not active');
            PIPE ROW (v_r);
        END IF;
        PIPE ROW (v_r);
    END IF;
    RETURN;
END;

Wenn ich diese Funktion ausführen,

select * from table(gma_trg_test(2, 2013));

Bekomme ich die folgende Fehlermeldung.

line 64: ORA-06530: Reference to uninitialized composite
ORA-06512: at "GAMMA_OWNER.GMA_TRG_TEST", line 12
Schreibe einen Kommentar