oracle 数据库
每天会形成一张表,如:table20101221;后面日期是变动的。
我需要写个批处理每天定时删除前一天的表,如:table20101220;那位高手给写个。
要求使用sqlplus或批处理、本人使用sqlplus写了个,但只是生成sql语句。:
select 'Drop Table ' || 'table'||to_char(sysdate-1,'YYYYMMDD')||';' From Dual;执行后,输出一条sql语句。
Drop Table table20101220;
本人想直接删除。
每天会形成一张表,如:table20101221;后面日期是变动的。
我需要写个批处理每天定时删除前一天的表,如:table20101220;那位高手给写个。
要求使用sqlplus或批处理、本人使用sqlplus写了个,但只是生成sql语句。:
select 'Drop Table ' || 'table'||to_char(sysdate-1,'YYYYMMDD')||';' From Dual;执行后,输出一条sql语句。
Drop Table table20101220;
本人想直接删除。
begin
execute immediate 'Drop Table ' || 'table'||to_char(sysdate-1,'YYYYMMDD');
commit;
end;
jobno number;
begin
dbms_job.submit(jobno, 'begin execute immediate 'drop table test'||to_char(sysdate,
'YYYYMMDD');end;' ,sysdate , 'trunc(sysdate+1)+1/24);
commit;
end;
我把这个生成个.bat文件,不能执行?
IS
v_tb varchar2(30);
v_sql VARCHAR2(200);
v_cnt NUMBER(4,0);
BEGIN
SELECT 'table'||to_char(sysdate-1,'yyyymmdd') into v_tb from dual;
-- 也许:table要大写(TABLE),看你是怎么命名的啦!
EXECUTE IMMEDIATE 'SELECT count(1) into v_cnt from user_tables where table_name=:v_tb'
INTO v_cnt USING v_tb;
IF v_cnt=1 THEN
EXECUTE IMMEDIATE 'DROP TABLE '||v_tb;
END IF;
END;
/
创建一个自定义过程
SQL> create or replace procedure MYPROC as
2 begin
3 execute immediate 'Drop Table ' || 'table'||to_char(sysdate-1,'YYYYMMDD');
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
PL/SQL 过程已成功完成。
创建一个自定义过程
SQL> create or replace procedure MYPROC as
2 begin
3 execute immediate 'Drop Table ' || 'table'||to_char(sysdate-1,'YYYYMMDD');
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'trunc(sysdate+1)+1/24'); --改下时间,每天凌晨一点运行
3 end;
4 /
PL/SQL 过程已成功完成。
2 IS
3 v_tb varchar2(30);
4 v_sql VARCHAR2(200);
5 v_cnt NUMBER(4,0);
6 BEGIN
7 SELECT 'TABLE'||to_char(sysdate-1,'yyyymmdd') into v_tb from dual;
8 -- 也许:table要大写(TABLE)
9 EXECUTE IMMEDIATE 'SELECT count(1) from user_tables where table_name=:v_tb' into v_cnt using v_tb;
10 IF v_cnt=1 THEN
11 EXECUTE IMMEDIATE 'DROP TABLE '||v_tb;
12 END IF;
13 END;
14 /过程已创建。eygle@SZTYORA> desc table20101221;
名称 是否为空? 类型
----------------------------------------------------------------------------------------- -------- -----------------------------------------------------------
ID NUMBER(18)
NAME VARCHAR2(30)eygle@SZTYORA> exec drop_tb_proc;PL/SQL 过程已成功完成。eygle@SZTYORA> desc table20101221;
ERROR:
ORA-04043: 对象 table20101221 不存在
eygle@SZTYORA>
set username=scott
rem 密码
set passwd=tigerrem 设置连接串tnsname
set tnsname=ctlrem 取年月日
set y=%date:~0,4%
set m=%date:~5,2%
set d=%date:~8,2%echo drop table table_name%y%%m%%d%; > script.sqlrem 删除表
sqlplus %username%/%passwd%@%tnsname% @script.sql 将这些东西copy到一个bat文件中,修改相关的参数 就可以运行了