创建一个用于删除分区的包
场景:
因工作中编写存储过程时经常需要用到临时表,但往临时表插入数据之前需要将原数据删除,因时常用到删除的动作,
如果做成一个类似工具一样的直接调用的就更好了,免得经常敲重复的代码。
解决:
先创建表头,再创建包体。
包头内容如下:
CREATE OR REPLACE PACKAGE dw_tool_pkg IS
--工具1:清空单层分区对应的分区,或清空符合分区中的主分区
PROCEDURE sp_dw_trunc_tab_par(p_tab_name IN VARCHAR2 --需要清空表分区的表名
,p_par_name IN VARCHAR2 --需要清空表分区的分区名
);
END dw_tool_pkg;
包体内容如下:
CREATE OR REPLACE PACKAGE BODY dw_tool_pkg IS
--工具1:清空单层分区对应的分区,或清空复合分区中的主分区
--工具1开始
PROCEDURE sp_dw_trunc_tab_par(p_tab_name IN VARCHAR2 --需要清空表分区的表名
,p_par_name IN VARCHAR2 --需要清空表分区的分区名
) IS
v_tab_name VARCHAR2(100); --表名
v_par_name VARCHAR2(100); --分区名
BEGIN
v_tab_name := p_tab_name;
v_par_name := p_par_name;
--删除分区语句
EXECUTE IMMEDIATE 'alter table ' || v_tab_name || ' truncate partition ' || v_par_name;
/*异常处理*/
EXCEPTION
WHEN OTHERS THEN
RAISE;
END sp_dw_trunc_tab_par;
--工具1结束
END dw_tool_pkg;