У меня есть тип объекта с конструктором no-args, но когда я укажу его как значение по умолчанию для столбца этого типа, я получаю ORA-00904: неверная ошибка идентификатора.Oracle: указание значения по умолчанию для столбца типа объекта
Пример:
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
Если я заменить DEFAULT с, например, test_t (1), он работает, но этот тип разбивает парадигму инкапсуляции OO, я хочу, чтобы все поля одного типа имели одинаковые значения по умолчанию «значения по умолчанию» (надеюсь, что вы знаете, что я имею в виду :-)
Отсутствует что-то здесь, или это нормально, и невозможно использовать конструкторы нестандартного типа, подобные этому?
ORA-06553: PLS-307 является результатом дубликата определения конструктора, Oracle несколько смешон в этом; если вы замените имя параметра in_val на val (как имя атрибута), он будет правильно переопределять конструктор по умолчанию. –
Правильно, но все же он находит этот конструктор ... –
Я знаю об обходном пути триггера, но 5-10 строк кода для чего-то, что должно быть возможно в гораздо более читабельном и управляемом режиме. Первоначально я предполагал, что это невозможно, потому что контекст SQL не видит внутри PL/SQL-контекста, но это явно не так, так как ни один из элементов OO не будет работать в чистом SQL. Таким образом, эта проблема является либо надзором со стороны Oracle, либо есть какой-то синтаксис, о котором я не знаю ... –