Ho un tipo di oggetto con costruttore no-args, ma quando lo specifico come valore predefinito per una colonna di quel tipo, ottengo ORA-00904: errore di identificatore non valido.Oracle: specifica il valore predefinito per la colonna del tipo di oggetto
Esempio:
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
Se sostituisco default con es test_t (1), funziona, ma quel tipo di rompe il paradigma di incapsulamento OO, voglio che tutti i campi dello stesso tipo abbiano gli stessi "valori predefiniti" predefiniti (spero tu sappia cosa intendo :-)
Mi manca qualcosa qui, o è normale e non è possibile usare costruttori non predefiniti come questo?
ORA-06553: PLS-307 è risultato di definizione costruttore duplicato, Oracle è in qualche modo divertente in questo; se si sostituisce il nome del parametro "in_val" con val (come il nome dell'attributo), esso sovrascriverà correttamente il costruttore predefinito. –
Esatto, ma trova ancora questo costruttore ... –
Sono a conoscenza della soluzione alternativa, ma 5-10 righe di codice per qualcosa che dovrebbe essere possibile in un modo molto più leggibile e gestibile. Inizialmente supponevo che non fosse possibile perché il contesto SQL non vede all'interno del contesto PL/SQL, ma chiaramente non è il caso da allora nessuna delle cose OO funzionerebbe in puro SQL. Quindi questo problema o è una svista su Oracle, o c'è qualche sintassi di cui non sono a conoscenza ... –