Примечание: я пробовал это только в Oracle 11g.
У меня была похожая потребность, и мне было проще просто объявить функцию (без пакета), чтобы вернуть желаемое значение. Чтобы поместить их в ddl для импорта, не забудьте разделить каждое объявление функции символом /. Например:
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;
/
Это позволяет вам ссылаться на функцию, как если бы она была постоянным значением (например, вам даже не нужны скобки).
Например (обратите внимание, что методы to_char показывают, что точность была сохранена):
SQL> выбрать undefined_int из двойного;
UNDEFINED_INT
-------------
2147483646
SQL> выбрать undefined_string из двойного;
UNDEFINED_STRING
--------------------------------------------------------------------------------
?
SQL> выбрать undefined_double из двойного;
UNDEFINED_DOUBLE
----------------
1.798E+308
SQL> выберите to_char (undefined_double, '9.999999999999999EEEE') из двойного;
TO_CHAR(UNDEFINED_DOUBL
-----------------------
1.797693134862316E+308
SQL> выберите to_char (undefined_double, '9.99999999999999999EEEE') из двойного;
TO_CHAR(UNDEFINED_DOUBLE,
-------------------------
1.79769313486231550E+308