Witajcie mam sobie typ nazwijmy go T_MY_ROWTYPE
CREATE OR REPLACE TYPE T_MY_ROWTYPE is OBJECT(
id NUMBER(10),
qcards_nr NUMBER(2,0),
rodzaj NUMBER(19,0),
kto_utworzyl VARCHAR2(30 CHAR),
constructor function T_MY_ROWTYPE(
SELF IN OUT NOCOPY T_MY_ROWTYPE,
id NUMBER,
qcards_nr NUMBER default 1,
rodzaj NUMBER default null,
kto_utworzyl VARCHAR2 default null
) RETURN SELF AS RESULT
)
CREATE OR REPLACE TYPE BODY T_MY_ROWTYPE AS
CONSTRUCTOR FUNCTION T_MY_ROWTYPE(
SELF IN OUT NOCOPY T_MY_ROWTYPE,
id NUMBER,
qcards_nr NUMBER default 1,
rodzaj NUMBER default null,
kto_utworzyl VARCHAR2 default null) RETURN SELF AS RESULT IS
BEGIN
SELF.ID := id;
SELF.qcards_nr := qcards_nr;
SELF.rodzaj := rodzaj;
SELF.kto_utworzyl := kto_utworzyl;
RETURN;
END;
END;
Dodatkowo mam tabelę jak poniżej:
CREATE TABLE MY_TABLE (
"KAD_ID" NUMBER NOT NULL,
"KAD_PARAMS" T_MY_ROWTYPE NOT NULL
)
W obecnej formie wszystko działa jak należy i taki kod:
begin
PROCKA_ROBIACA_INSERT(1,T_MY_ROWTYPE(123,9,null,'alamakota'));
PROCKA_ROBIACA_INSERT(2,T_MY_ROWTYPE(123));
end;
Działa bez problemu czyli mogę używać tylko 1 lub z wieloma parametrami.
Teraz chciałbym rozbudować ten typ (który przypominam jest już kolumną w tabeli - a to utrudnia pewne rzeczy bo nie chcę np usuwać typu i tworzyć nowego) o nową kolumnę. Robię zatem:
ALTER TYPE T_MY_ROWTYPE ADD ATTRIBUTE (id_org number(10)) CASCADE
ALTER TYPE T_MY_ROWTYPE
ADD constructor function T_MY_ROWTYPE(
SELF IN OUT NOCOPY T_MY_ROWTYPE,
id NUMBER,
qcards_nr NUMBER default 1,
rodzaj NUMBER default null,
kto_utworzyl VARCHAR2 default null,
id_org number default null) RETURN SELF AS RESULT
CASCADE
CREATE OR REPLACE TYPE BODY T_MY_ROWTYPE AS
CONSTRUCTOR FUNCTION T_MY_ROWTYPE(
SELF IN OUT NOCOPY T_MY_ROWTYPE,
id NUMBER,
qcards_nr NUMBER default 1,
rodzaj NUMBER default null,
kto_utworzyl VARCHAR2 default null) RETURN SELF AS RESULT IS
BEGIN
SELF.ID := id;
SELF.qcards_nr := qcards_nr;
SELF.rodzaj := rodzaj;
SELF.kto_utworzyl := kto_utworzyl;
RETURN;
END;
CONSTRUCTOR FUNCTION T_MY_ROWTYPE(
SELF IN OUT NOCOPY T_MY_ROWTYPE,
id NUMBER,
qcards_nr NUMBER default 1,
rodzaj NUMBER default null,
kto_utworzyl VARCHAR2 default null,
id_org number default null) RETURN SELF AS RESULT IS
BEGIN
SELF.ID := id;
SELF.qcards_nr := qcards_nr;
SELF.rodzaj := rodzaj;
SELF.kto_utworzyl := kto_utworzyl;
SELF.id_org := id_org;
RETURN;
END;
END;
Teorytycznie wszystko się poprawnie wykonało. Dodał się nowy atrybut oraz nowy konstruktor przeładowany. Niestety w tej postaci to:
begin
PROCKA_ROBIACA_INSERT(2,T_MY_ROWTYPE(123));
end;
nie działa wcale
a to:
begin
PROCKA_ROBIACA_INSERT(1,T_MY_ROWTYPE(123,9,null,'alamakota',99));
end;
nie odkłada tego 99 w tabeli. Pomożecie?