Note : J'ai seulement essayé ceci dans Oracle 11g.
J'avais un besoin similaire et j'ai trouvé plus facile de déclarer simplement une fonction (sans le package) pour retourner la valeur désirée. Pour les placer dans le ddl pour l'importation, n'oubliez pas de séparer chaque déclaration de fonction par le caractère /. Par exemple :
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;
/
Cela vous permet de référencer la fonction comme s'il s'agissait d'une valeur constante (par exemple, vous n'avez même pas besoin des parenthèses).
Par exemple (notez les méthodes to_char pour montrer que la précision a été préservée) : SQL> select undefined_int from dual ;
UNDEFINED_INT
-------------
2147483646
SQL> select undefined_string from dual ;
UNDEFINED_STRING
--------------------------------------------------------------------------------
?
SQL> select undefined_double from dual ;
UNDEFINED_DOUBLE
----------------
1.798E+308
SQL> select to_char(undefined_double,'9.999999999999999EEEE') from dual ;
TO_CHAR(UNDEFINED_DOUBL
-----------------------
1.797693134862316E+308
SQL> select to_char(undefined_double,'9.99999999999999999EEEE') from dual ;
TO_CHAR(UNDEFINED_DOUBLE,
-------------------------
1.79769313486231550E+308