在pl/sql developer 中编写如下程序
create or replace procedure dropdata(p_tablename in varchar2, --表名格式 test#test2#test3#
p_begindate in varchar2, --开始时间
p_enddate in varchar2) is
p_temptablename varchar2(2000);
p_positionnumber;
p_table varchar2(50);
sql_backvarchar2(200);
sql_deletevarchar2(200);
pv_beginDate date := to_date(p_begindate, 'yyyy-mm-dd');
pv_endDate date := to_date(p_enddate, 'yyyy-mm-dd');
begin
p_temptablename := p_tablename;
p_position:= instr(p_temptablename, '#');
--假如分割符号时 '#'
loop
p_table := substr(p_temptablename, 1, p_position - 1);
p_temptablename := substr(p_temptablename, p_position + 1);
--备份原来的数据
sql_back := 'create table ' || p_table || '_bak as select * from ' || p_table;
execute immediate sql_back;
--假设表中有创建日期字段createDate
sql_delete := 'delete from ' || p_table ||
' where createDate >= :1 and createDatecreate or replace procedure proc_ctab_toms (p_tname in varchar)
2as
3v_sql varchar2(128);
4begin
5 v_sql:='create table '||p_tname||'_bak as select * from '||p_tname;
6 execute immediate v_sql;
7 exception
8 when OTHERS then
9
dbms_output.put_line('backup error sqlcode='||SQLCODE||' sql='||v_sql);
10end;
11/
过程已创建。
SQL> desc toms
名称
是否为空? 类型
----------------------------------------- -------- ----------------------------
STR
VARCHAR2(32)
SQL> desc toms_bak
ERROR:
ORA-04043: 对象 toms_bak 不存在
SQL> set serveroutput on
SQL> exec proc_ctab_toms('toms');
PL/SQL 过程已成功完成。
SQL> desc toms_bak
名称
是否为空? 类型
----------------------------------------- -------- ----------------------------
STR
VARCHAR2(32)
SQL>
SQL> exec proc_ctab_toms('toms');
backup error sqlcode=-955 sql=create table toms_bak as select * from toms
PL/SQL 过程已成功完成。
SQL>
[/php] |