Mam typ obiektu z konstruktorem bez-args, ale kiedy określam go jako wartość domyślną dla kolumny tego typu, otrzymuję ORA-00904: błąd nieprawidłowego identyfikatora.Oracle: określanie wartości domyślnej dla kolumny typu obiektu
przykład:
CREATE OR REPLACE TYPE test_t AS OBJECT ( val NUMBER(10), CONSTRUCTOR FUNCTION test_t return self as result ) CREATE OR REPLACE TYPE BODY test_t AS CONSTRUCTOR FUNCTION test_t RETURN SELF AS RESULT IS BEGIN val := 1; RETURN; END; END; CREATE TABLE test_table ( test_attr test_t DEFAULT new test_t() ) Error: ORA-00904: "INKA"."TEST_T"."TEST_T": invalid identifier
Jeśli zastąpić domyślnych z np test_t (1), działa, ale ten rodzaj łamie paradygmat enkapsulacji OO, chcę, aby wszystkie pola tego samego typu miały te same domyślne "domyślne wartości" (mam nadzieję, że wiesz o co mi chodzi :-)
Brakuje mi coś tutaj, czy jest to normalne i nie jest możliwe użycie innych niż domyślne konstruktorów?
ORA-06553: PLS-307 jest wynikiem duplikatu definicji konstruktora, Oracle jest nieco zabawne, że; jeśli zastąpisz parametr parametru "in_val" wartością val (tak jak nazwa atrybutu), to poprawnie zastąpi domyślny konstruktor. –
Dobrze, ale wciąż znajduje tego konstruktora ... –
Jestem świadomy obejścia wyzwalacza, ale 5-10 linijek kodu dla czegoś, co powinno być możliwe w znacznie bardziej czytelny i łatwy sposób. Początkowo zakładałem, że nie jest to możliwe, ponieważ kontekst SQL nie jest widoczny wewnątrz kontekstu PL/SQL, ale tak nie jest, ponieważ wtedy żaden z obiektów OO nie działałby w czystym SQL. Więc ten problem jest albo niedopatrzeniem ze strony Oracle, albo jest jakaś składnia, której nie jestem świadomy ... –