Прочитайте файл и сгенерируйте запрос в plsql oracle 11 - PullRequest
0 голосов
/ 07 апреля 2019

Я пишу хранимую процедуру, в которой я должен сделать следующее: я хочу иметь файл (любые свойства формата, 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?

1 Ответ

1 голос
/ 07 апреля 2019

Я думаю, вам нужно это

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;
/

для получения результатов с типом курсора.

...