前提:grant create table to 你的用户
grant select on dba_users to 你的用户;
sqlplus 你的用户/你的口令
SQL> create table test (no int);
表已创建。
SQL> insert into test values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
1
SQL> select table_name from tabs where table_name like 'TEST%';
TEST
SQL> create or replace procedure backup_table (p_tname varchar2,
2 p_tsname varchar2 default null,
3 p_ownervarchar2 default null) as
4
5v_sql varchar2(256);
6v_tsname varchar2(32);
7v_ownervarchar2(32);
8
9begin
10
11 if p_owner is null then
12v_owner:=user;
13 else
14v_owner:=upper(p_owner);
15 end if;
16 if p_tsname is null then
17select DEFAULT_TABLESPACE into v_tsname from dba_users where username=v_owner;
18 else
19v_tsname:=upper(p_tsname);
20 end if;
21 v_sql:='create table '||p_tname||'_'||to_char(sysdate,'yyyymmddhh24miss')||' tablespace '||v
_tsname||' as select * from '||v_owner||'.'||p_tname;
22 execute immediate v_sql;
23 exception
24 when OTHERS then
25
raise_application_error(-20001,'backup table '||p_tname||' error sql='||v_sql||' code='
||SQLCODE);
26end;
27
28 /
过程已创建。
SQL> exec backup_table('test');
PL/SQL 过程已成功完成。
SQL> select table_name from tabs where table_name like 'TEST%';
TEST
TEST_20060324143136
SQL> select* from TEST_20060324143136;
1
SQL>