Это сводит меня с ума на некоторое время:Использование% TYPE на поле записи в PL/SQL
DECLARE
TYPE AttrValueRec IS RECORD (
attr VARCHAR2(40),
val VARCHAR2(2000),
inst NUMBER(4)
);
FUNCTION create_attrval(attr AttrValueRec.attr%TYPE,
val AttrValueRec.val%TYPE,
inst AttrValueRec.inst%TYPE := 1)
RETURN AttrValueRec IS
attr_value AttrValueRec;
BEGIN
attr_value.attr := attr;
attr_value.val := val;
attr_value.inst := inst;
RETURN attr_value;
END;
BEGIN
NULL;
END;
Использование %TYPE
на поле записи, кажется, не работает. Она производит следующее сообщение об ошибке:
ORA-06550: line 8, column 36:
PLS-00206: %TYPE must be applied to a variable, column, field or attribute, not to "ATTRVALUEREC.ATTR"
ORA-06550: line 8, column 5:
PL/SQL: Item ignored
Хотя явного определения типа снова работает:
DECLARE
TYPE AttrValueRec IS RECORD (
attr VARCHAR2(40),
val VARCHAR2(2000),
inst NUMBER(4)
);
FUNCTION create_attrval(attr VARCHAR2,
val VARCHAR2,
inst NUMBER := 1)
RETURN AttrValueRec IS
attr_value AttrValueRec;
BEGIN
attr_value.attr := attr;
attr_value.val := val;
attr_value.inst := inst;
RETURN attr_value;
END;
BEGIN
NULL;
END;
Может кто-нибудь объяснить мне, почему он не работает? Есть ли способ ссылаться на тип, объявленный в определении записи, вместо того, чтобы явно определять его снова в функции?
Спасибо.
большой ответ! Как ты это узнал! и обходной путь все еще существует в 11 г ... Надеюсь, что Oracle в ближайшее время осуществит что-то более разумное. – Pancho