我的情况很奇怪,我不知道如何处理它。设想:
在变量v_tables_param
中,我有以下字符串(我要导出的表的名称)'IN(''REPORT_PERIOD'',''OBJECT_AVAILABILITY'')'
。
当我尝试指定导出表所需的以下元数据过滤器时:
DBMS_DATAPUMP.METADATA_FILTER(handle => n_h1, name =>'NAME_EXPR',value =>v_tables_param);
我得到一个ORA-39001: invalid argument value
。
但是,如果我将 的确切值编码v_tables_param
到元数据过滤器中,它就像一个魅力:
DBMS_DATAPUMP.METADATA_FILTER(handle => n_h1, name =>'NAME_EXPR',value =>'IN(''REPORT_PERIOD'',''OBJECT_AVAILABILITY'')');
知道这里发生了什么吗?
当硬编码字符串与具有相同值的变量不同时,oracle 中是否存在一些奇怪的情况?
编辑:我添加了计算值的函数v_tables_param
FUNCTION SPLIT_TABLES(
v_tables_list VARCHAR2 --this is a string that looks like "table1,table2,table3"
) RETURN VARCHAR2
IS
n_idx PLS_INTEGER;
n_i PLS_INTEGER := 0;
v_tables VARCHAR2(2000) := v_tables_list;
v_filter_value VARCHAR(2000);
v_current_table VARCHAR2(200);
BEGIN
v_filter_value := '''IN(';
LOOP
n_idx := instr(v_tables,',');
IF n_idx > 0 THEN
v_current_table := (substr(v_tables,1,n_idx-1));
v_filter_value := v_filter_value || '''''' || v_current_table || ''''',';
v_tables := substr(v_tables,n_idx+1);
n_i := n_i + 1;
ELSE
v_current_table := v_tables;
v_filter_value := v_filter_value || '''''' || v_current_table || ''''')''';
EXIT;
END IF;
END LOOP;
RETURN v_filter_value;
END SPLIT_TABLES;