处理Oracle分表的问题,需要为程序创建一个自动分表的存储过程,需要保证所有表结构,约束,索引等等一致。
说明:此Oracle为19c版本。
create or replace procedure COPYTABLE --存储过程名称
(tableName in varchar2, newTable in varchar2, dateStr in varchar2) --相关参数
authid current_user as --调用者权限
v_drop_table_sql varchar2(200); --
v_create_table_sql varchar2(4000); --
v_add_default_sql varchar2(4000); --
i_table_count number; --
cursor default_cols is --默认值游标
select COLUMN_NAME, DATA_DEFAULT --
from user_tab_columns --
where DATA_DEFAULT is not null --
and TABLE_NAME = tableName; --
v_add_primary_sql clob; --
cursor primary_cols is --主键游标,虽然主键只能有一个,但为统一起见还是用了游标
select distinct tmp.TABLE_NAME, --
tmp.INDEX_NAME, --
listagg(tmp.COLUMN_NAME) --
over(partition by tmp.TABLE_NAME)) as pri_cols --
from (select i.TABLE_NAME, --
i.INDEX_NAME, --
i.COLUMN_NAME, --
i.COLUMN_POSITION --
from user_ind_columns i --
join user_constraints c --
on i.INDEX_NAME = c.index_name --
where c.CONSTRAINT_TYPE = 'P' --
and i.TABLE_NAME = tableName --
order by 1, 2, 4) tmp;

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



