从Oracle 12.2开始,表名和许多其他标识符将其最大长度从VARCHAR2(30)
更改为VARCHAR2(128)
,如f.i所述。 here
我们有大量脚本,存储过程和表引用表名,列名等,例如用于内务管理(复制表,丢弃分区等)。
编辑:他们需要进行更改,以便在出现第一个较长名称后继续工作。我认为这可能需要一些时间,因为人们已经习惯了短名称,但可以安全地假设它会在某个阶段发生。
正确的方法可能是改变
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
);
任何帮助表示感谢。
答案 0 :(得分:1)