Nota: Solo probé esto en Oracle 11g.
Tuve una necesidad similar y me resultó más fácil simplemente declarar una función (sin el paquete) para devolver el valor deseado. Para ponerlos en ddl para la importación, recuerde separar cada declaración de función con el carácter /. Por ejemplo:
CREATE OR REPLACE FUNCTION UNDEFINED_INT RETURN NUMBER AS BEGIN RETURN 2147483646; END;
/
CREATE OR REPLACE FUNCTION UNDEFINED_SHORT RETURN NUMBER AS BEGIN RETURN 32766; END;
/
CREATE OR REPLACE FUNCTION UNDEFINED_LONG RETURN NUMBER AS BEGIN RETURN 223372036854775806; END;
/
CREATE OR REPLACE FUNCTION UNDEFINED_FLOAT RETURN FLOAT AS BEGIN RETURN .4028233E38; END;
/
CREATE OR REPLACE FUNCTION UNDEFINED_DOUBLE RETURN BINARY_DOUBLE AS BEGIN RETURN to_binary_double('1.7976931348623155E308'); END;
/
CREATE OR REPLACE FUNCTION UNDEFINED_STRING RETURN VARCHAR AS BEGIN RETURN '?'; END;
/
Esto permite hacer referencia a la función como si fuera un valor constante (por ejemplo, usted ni siquiera necesita los paréntesis).
Por ejemplo (observe los métodos to_char para mostrar que la precisión se ha conservado): SQL> seleccione undefined_int desde dual;
UNDEFINED_INT
-------------
2147483646
SQL> seleccionar undefined_string desde dual;
UNDEFINED_STRING
--------------------------------------------------------------------------------
?
SQL> seleccionar undefined_double from dual;
UNDEFINED_DOUBLE
----------------
1.798E+308
SQL> select to_char (undefined_double, '9.999999999999999EEEE') de la doble;
TO_CHAR(UNDEFINED_DOUBL
-----------------------
1.797693134862316E+308
SQL> select to_char (undefined_double, '9.99999999999999999EEEE') de la doble;
TO_CHAR(UNDEFINED_DOUBLE,
-------------------------
1.79769313486231550E+308
Debe marcar la función de recorrido 'deterministic', u Oracle lo llamará innecesariamente cada vez que necesite' max_number' – Crack