Начиная с Oracle 12.2, имена таблиц и множество других идентификаторов изменяют свою максимальную длину с VARCHAR2(30)
на VARCHAR2(128)
, как упоминалось здесь .
У нас есть тоннысценарии, хранимые процедуры и таблицы, которые ссылаются на имена таблиц, имена столбцов и т. д., например, для служебных целей (копирование таблиц, удаление разделов и т. д.).
РЕДАКТИРОВАТЬ: их необходимо изменить, чтобы они продолжалиработать, как только появится первое более длинное имя.Я думаю, что это, вероятно, займет некоторое время, так как люди так привыкли к коротким именам, но можно с уверенностью предположить, что это произойдет на каком-то этапе.
Вероятно, правильным будет переход с
CREATE OR REPLACE PROCEDURE myprocedure(pname VARCHAR2) IS
tabname VARCHAR2(30);
colname VARCHAR2(30);
idxname VARCHAR2(30);
BEGIN
tabname := pname;
END myprocedure;
/
до
CREATE OR REPLACE PROCEDURE myprocedure(pname VARCHAR2) IS
tabname USER_TABLES.TABLE_NAME%TYPE;
colname USER_TAB_COLUMNS.COLUMN_NAME%TYPE;
idxname USER_INDEXES.INDEX_NAME%TYPE;
BEGIN
tabname := pname;
END myprocedure;
/
Но что делать с таблицами?Единственная идея, которую я смог найти, это отключенный внешний ключ, но это кажется злым (кроме того, я даже не могу получить права правильно):
CREATE TABLE mytable (
table_name REFERENCES USER_TABLES(TABLE_NAME) DISABLE
);
Любая помощь приветствуется.