问题描述
下午好,这是一个开始的程序员。我遇到了DBMS_DATAPUMP.data_filter的问题。Data_filter不起作用。
创建过程exp_tables_w_qfilter
(
VARCHAR2中的p_schema_name,-- 'LTP'
VARCHAR2中的p_table_name,-“AUDITTABLE_TEST”
VARCHAR2中的p_table_filter默认为NULL-'where TIME >= time_templ'
)
是
v_sid VARCHAR2(200) := 'test1'; -此数据库的sid
V _ 句柄号; -- 作业句柄
v_current_time日期: = SYSDATE; -- 文件、作业名称等的一致时间戳。
v_start_time日期; -- 日志文件的开始时间
v_logfile_name VARCHAR2(200); -- 日志文件名
v_dumpfile_name VARCHAR2(200); -- 日志文件名
v_default_dir VARCHAR(30) := 'DPDIR'; -目录
v_line_no整数: = 0; -- 调试行号
v_sqlcode编号; -- sqlcode
v_compatible VARCHAR2(40) := '兼容'; -- 默认为 '兼容'
vc_job_mode常数VARCHAR2(200) := '表'; -- 作业模式
-v_inpup_param3 VARCHAR2(2000);
-- v_sysdate VARCHAR2(2000);
-v_some_var VARCHAR2 (2000);
var1 varchar2(1000) := 'where time >= to_date(''repl_val'',''DD-MM-yyy'')';
var2 varchar2(1000) := 'repl_val';
var3 varchar2(1000);
开始
v_line_no := 100; -调试行号
-创建日志和转储文件名
如果v_compatible = '兼容'
然后
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % U _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.dmp';
其他
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '_' | | V _ 兼容 | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % u' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi ') | |' _ '| | V _ 兼容 | |'.dmp';
如果结束;
v_line_no := 150; -调试行号
-打开工作
开始
V _ 句柄: =
DBMS_DATAPUMP.open (操作 => '导出',
job_mode => vc_job_mode,
job_name => '导出 _' | | vc_job_mode | | '_' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi '),
版本 => v_compatible);
异常
当其他人
然后
DBMS_OUTPUT.put_line(SUBSTR('在dbms_datapump.open中失败',1,255));
加薪;
结束;
v_line_no := 200; -调试行号
-- 添加日志文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => v_logfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 日志文件);
v_line_no := 400; -调试行号
-添加数据文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => 'dp' | | '_ % u' | | v_dumpfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 转储文件);
v_line_no := 500; -调试行号
-模式的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'schema_list ',VALUE => ''' | | p_schema_name | | ''');
v_line_no := 550; -调试行号
-表格的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'name_list ',VALUE => ''' | | p_table_name | | ''');
v_line_no := 570; -调试行号
从dual中选择sysdate-365到var3;
dbms_output.put_line('第一个变量值为:' | | var1);
dbms_output.put_line('第二个变量值为:' | | var2);
dbms_output.put_line('第三个变量值为:' | | var3);
var1 := 替换 (var1,var2,var3);
dbms_output.put_line('填充后的第一个变量值为:' | | var1);
DBMS_DATAPUMP.data_filter (句柄 => v_handle,名称 => '子查询',值 => var1);
----------------------------
v_line_no := 600; -调试行号
-获取开始时间
v_start_time := 系统日期;
-在日志文件中添加开始时间
DBMS_DATAPUMP.log_entry(handle => v_handle,MESSAGE => '作业开始于' | | TO_CHAR(v_start_time,'dd-Mon-RR HH24:MI:SS'),log_file_only => 0);
v_line_no := 700; -调试行号
-开始工作
DBMS_DATAPUMP.start_job (句柄 => v_handle);
DBMS_DATAPUMP.detach (句柄 => v_handle);
v_line_no := 800; -调试行号
异常
当其他人
然后
开始
DBMS_DATAPUMP.detach (句柄 => v_handle);
异常
当其他人
然后
NULL;
结束;
DBMS_OUTPUT.put_line(SUBSTR ('v_line_no的值 = '| | TO_CHAR(v_line_no),1,255));
加薪;
结束exp_tables_w_qfilter; -过程exp_tables_w_qfilter
/
创建过程exp_tables_w_qfilter
(
VARCHAR2中的p_schema_name,-- 'LTP'
VARCHAR2中的p_table_name,-“AUDITTABLE_TEST”
VARCHAR2中的p_table_filter默认为NULL-'where TIME >= time_templ'
)
是
v_sid VARCHAR2(200) := 'test1'; -此数据库的sid
V _ 句柄号; -- 作业句柄
v_current_time日期: = SYSDATE; -- 文件、作业名称等的一致时间戳。
v_start_time日期; -- 日志文件的开始时间
v_logfile_name VARCHAR2(200); -- 日志文件名
v_dumpfile_name VARCHAR2(200); -- 日志文件名
v_default_dir VARCHAR(30) := 'DPDIR'; -目录
v_line_no整数: = 0; -- 调试行号
v_sqlcode编号; -- sqlcode
v_compatible VARCHAR2(40) := '兼容'; -- 默认为 '兼容'
vc_job_mode常数VARCHAR2(200) := '表'; -- 作业模式
-v_inpup_param3 VARCHAR2(2000);
-- v_sysdate VARCHAR2(2000);
-v_some_var VARCHAR2 (2000);
var1 varchar2(1000) := 'where time >= to_date(''repl_val'',''DD-MM-yyy'')';
var2 varchar2(1000) := 'repl_val';
var3 varchar2(1000);
开始
v_line_no := 100; -调试行号
-创建日志和转储文件名
如果v_compatible = '兼容'
然后
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % U _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.dmp';
其他
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '_' | | V _ 兼容 | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % u' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi ') | |' _ '| | V _ 兼容 | |'.dmp';
如果结束;
v_line_no := 150; -调试行号
-打开工作
开始
V _ 句柄: =
DBMS_DATAPUMP.open (操作 => '导出',
job_mode => vc_job_mode,
job_name => '导出 _' | | vc_job_mode | | '_' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi '),
版本 => v_compatible);
异常
当其他人
然后
DBMS_OUTPUT.put_line(SUBSTR('在dbms_datapump.open中失败',1,255));
加薪;
结束;
v_line_no := 200; -调试行号
-- 添加日志文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => v_logfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 日志文件);
v_line_no := 400; -调试行号
-添加数据文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => 'dp' | | '_ % u' | | v_dumpfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 转储文件);
v_line_no := 500; -调试行号
-模式的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'schema_list ',VALUE => ''' | | p_schema_name | | ''');
v_line_no := 550; -调试行号
-表格的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'name_list ',VALUE => ''' | | p_table_name | | ''');
v_line_no := 570; -调试行号
从dual中选择sysdate-365到var3;
dbms_output.put_line('第一个变量值为:' | | var1);
dbms_output.put_line('第二个变量值为:' | | var2);
dbms_output.put_line('第三个变量值为:' | | var3);
var1 := 替换 (var1,var2,var3);
dbms_output.put_line('填充后的第一个变量值为:' | | var1);
DBMS_DATAPUMP.data_filter (句柄 => v_handle,名称 => '子查询',值 => var1);
----------------------------
v_line_no := 600; -调试行号
-获取开始时间
v_start_time := 系统日期;
-在日志文件中添加开始时间
DBMS_DATAPUMP.log_entry(handle => v_handle,MESSAGE => '作业开始于' | | TO_CHAR(v_start_time,'dd-Mon-RR HH24:MI:SS'),log_file_only => 0);
v_line_no := 700; -调试行号
-开始工作
DBMS_DATAPUMP.start_job (句柄 => v_handle);
DBMS_DATAPUMP.detach (句柄 => v_handle);
v_line_no := 800; -调试行号
异常
当其他人
然后
开始
DBMS_DATAPUMP.detach (句柄 => v_handle);
异常
当其他人
然后
NULL;
结束;
DBMS_OUTPUT.put_line(SUBSTR ('v_line_no的值 = '| | TO_CHAR(v_line_no),1,255));
加薪;
结束exp_tables_w_qfilter; -过程exp_tables_w_qfilter
/
专家解答
你很接近-只是需要一点日期格式更改。这是代码的整理版本,第47行是关键格式部分。
SQL>
SQL> create or replace
2 PROCEDURE exp_tables_w_qfilter
3 (
4 p_schema_name IN VARCHAR2 := 'SCOTT',
5 p_table_name IN VARCHAR2 := 'EMP'
6 )
7 IS
8
9 v_sid VARCHAR2(200) := 'NP12'; -- sid for this databaes
10 v_handle NUMBER; -- job handle
11 v_current_time DATE := SYSDATE; -- consistent timestamp for files, job_name etc.
12 v_start_time DATE; -- start time for log file
13 v_logfile_name VARCHAR2(200); -- logfile name
14 v_dumpfile_name VARCHAR2(200); -- logfile name
15 v_default_dir VARCHAR(30) := 'TEMP'; -- directory
16 v_line_no INTEGER := 0; -- debug line no
17 v_sqlcode NUMBER; -- sqlcode
18 v_compatible VARCHAR2(40) := 'COMPATIBLE'; -- default is 'COMPATIBLE'
19 vc_job_mode CONSTANT VARCHAR2(200) := 'TABLE'; -- Job mode
20 var1 varchar2(1000) := 'where hiredate >= to_date(''repl_val'', ''DD-MM-YYYY'')';
21 var2 varchar2(1000) := 'repl_val';
22 var3 varchar2(1000);
23
24 BEGIN
25
26 v_logfile_name := 'expdp_' || v_sid || '_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI') || '.log';
27 v_dumpfile_name := 'expdp_' || v_sid || '_%U_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI') || '.dmp';
28
29 v_handle := DBMS_DATAPUMP.open(operation => 'EXPORT',
30 job_mode => vc_job_mode,
31 job_name => 'EXPORT_' || vc_job_mode || '_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI'),
32 version => v_compatible);
33
34 DBMS_DATAPUMP.add_file(handle => v_handle,
35 filename => v_logfile_name,
36 directory => v_default_dir,
37 filetype => DBMS_DATAPUMP.ku$_file_type_log_file);
38
39 DBMS_DATAPUMP.add_file(handle => v_handle,
40 filename => 'dp' || '_%U_' || v_dumpfile_name,
41 directory => v_default_dir,
42 filetype => DBMS_DATAPUMP.ku$_file_type_dump_file);
43
44 DBMS_DATAPUMP.metadata_filter(handle => v_handle, name => 'SCHEMA_LIST', VALUE => '''' || p_schema_name || '''');
45 DBMS_DATAPUMP.metadata_filter(handle => v_handle, name => 'NAME_LIST', VALUE => '''' || p_table_name || '''');
46
47 select to_char(date '1981-07-01','DD-MM-YYYY') into var3 from dual;
48
49 dbms_output.put_line('First variable value is: ' || var1);
50 dbms_output.put_line('Second variable value is: ' || var2);
51 dbms_output.put_line('Third variable value is: ' || var3);
52 var1 := replace(var1, var2, var3);
53 dbms_output.put_line('First variable value after perlacement is: ' || var1);
54
55 DBMS_DATAPUMP.data_filter(handle => v_handle, name => 'SUBQUERY', VALUE => var1);
56
57 v_start_time := SYSDATE;
58 DBMS_DATAPUMP.log_entry(handle => v_handle, MESSAGE => 'Job Start at ' || TO_CHAR(v_start_time, 'DD-Mon-RR HH24:MI:SS'), log_file_only => 0);
59
60 DBMS_DATAPUMP.start_job(handle => v_handle);
61 DBMS_DATAPUMP.detach(handle => v_handle);
62 EXCEPTION
63 WHEN OTHERS
64 THEN
65 BEGIN
66 DBMS_DATAPUMP.detach(handle => v_handle);
67 EXCEPTION
68 WHEN OTHERS
69 THEN
70 NULL;
71 END;
72
73 END;
74 /
Procedure created.
SQL>
SQL>
SQL> set serverout on
SQL> exec exp_tables_w_qfilter
First variable value is: where hiredate >= to_date('repl_val', 'DD-MM-YYYY')
Second variable value is: repl_val
Third variable value is: 01-07-1981
First variable value after perlacement is: where hiredate >= to_date('01-07-1981', 'DD-MM-YYYY')
PL/SQL procedure successfully completed.
;;; Job Start at 27-Jun-16 09:09:12
FLASHBACK automatically enabled to preserve database integrity.
Starting "MCDONAC"."EXPORT_TABLE_2016_0627_0909":
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
. . exported "SCOTT"."EMP" 8.531 KB 8 rows
Master table "MCDONAC"."EXPORT_TABLE_2016_0627_0909" successfully loaded/unloaded
******************************************************************************
Dump file set for MCDONAC.EXPORT_TABLE_2016_0627_0909 is:
C:\TEMP\DP_01_EXPDP_NP12_01_2016_0627_0909.DMP
Job "MCDONAC"."EXPORT_TABLE_2016_0627_0909" successfully completed at Mon Jun 27 09:09:14 2016 elapsed 0 00:00:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




