如何从Oracle 12.2中的短表名迁移到VARCHAR2(30)到VARCHAR2(128)?

时间:2018-05-27 15:07:46

标签: oracle oracle12c

从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
);

任何帮助表示感谢。