我正在编写一个存储过程,我必须执行以下操作: 我想要一个文件(任何格式的属性,json,xml(,该文件将包含我要从表中提取哪些列的信息。
例如:我的表有列 A
、 B
、 C
、D
、 E
列,假设我的file.properties
有以下信息
A=1
B=0
C=1
D=1
F=0
所以我生成的查询应该Select A,C,D from my table;
如何在 Oracle 11G 中执行此操作?
我认为你需要这个
SQL> set serveroutput on;
SQL> create or replace procedure pr_dynamic_sql( v_result out sys_refcursor ) is
v_outfile utl_file.file_type;
v_path varchar2(100) := 'UTL_FILE_DIR';
-- alias for the directory where your text files generated at OS.
v_row varchar2(100);
v_file varchar2(100);
v_letter varchar2(10);
v_number varchar2(10);
v_sql varchar2(100):= 'select ';
begin
v_file := 'myfile.properties';
v_outfile := utl_file.fopen(v_path, v_file, 'r');
loop
begin
utl_file.get_line(v_outfile,v_row);
v_letter := regexp_substr(v_row,'[^=]');
v_number := substr(regexp_substr(v_row,'[^=]+$'),1,1);
if v_number = '1' then
v_sql := v_sql||v_letter||',';
end if;
exception when no_data_found then exit;
end;
end loop;
utl_file.fclose(v_outfile);
v_sql := rtrim(v_sql,',')||' from mytable';
open v_result for v_sql;
end;
并致电
SQL> begin
pr_dynamic_sql(v_result => :v_result);
end;
/
以获取游标类型的结果。