Tengo un tipo de objeto con constructor no-args, pero cuando lo especifico como valor predeterminado para una columna de ese tipo, obtengo ORA-00904: error de identificador no válido.Oracle: especificar el valor predeterminado para la columna de tipo de objeto
Ejemplo:
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
Si sustituyo DEFAULT con, por ejemplo test_t (1), funciona, pero eso rompe el paradigma de encapsulación OO, quiero que todos los campos del mismo tipo tengan los mismos "valores predeterminados" predeterminados (espero que sepas lo que quiero decir :-)
Me falta algo aquí, o es esto normal y no es posible usar constructores no predeterminados como este?
ORA-06553: PLS-307 es resultado de la definición del constructor duplicado, Oracle es algo gracioso en eso; si reemplaza el nombre del parámetro "in_val" con val (como es el nombre del atributo), anulará correctamente el constructor predeterminado. –
Correcto, pero aún encuentra este constructor ... –
Conozco la solución de desencadenante, pero 5-10 líneas de código para algo que debería ser posible de una manera mucho más legible y manejable. Inicialmente, supuse que no era posible porque el contexto de SQL no se ve dentro del contexto PL/SQL, pero claramente no es el caso, ya que ninguna de las cosas OO funcionaría en SQL puro. Entonces, este problema es un descuido por parte de Oracle, o hay alguna sintaxis que desconozco ... –