You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12.2中如何从VARCHAR2(30)迁移至VARCHAR2(128)长表名?

Oracle 12.2标识符长度扩容后的代码适配困扰

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

现在改成用数据字典的%TYPE来定义变量,这样就能自动适配标识符的长度变化:

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

有没有大佬能给我支个招呀?

内容的提问来源于stack exchange,提问作者wolφi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:13