代码之家  ›  专栏  ›  技术社区  ›  wolφi

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

  •  1
  • wolφi  · 技术社区  · 6 年前

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

    任何帮助赞赏。

    1 回复  |  直到 6 年前