добавление цитат в файл оракула - PullRequest
0 голосов
/ 03 мая 2019

У меня есть оракул, который добавляет табличные пробелы к данным таблицы и печатает их в файл оракула. ​​Но теперь мне также нужны кавычки вокруг некоторых столбцов, некоторые столбцы не нуждаются в кавычках.

этот процесс выглядиткак это ..

create or replace PROCEDURE usp_create_nestor AS

v_column_name      VARCHAR2(4000);
TYPE t_bulk_collect_test_tab IS TABLE OF VARCHAR2(4000);
v_tab         t_bulk_collect_test_tab;
clob_var      CLOB;
v_file      utl_file.file_type;
ref_cur       SYS_REFCURSOR;
v_qry           VARCHAR2(500);
v_flag      NUMBER := 0;
v_year VARCHAR2(80);

BEGIN

SELECT LISTAGG ( column_name,'||CHR(9)||' ) WITHIN GROUP (ORDER BY column_id)
INTO v_column_name FROM all_tab_cols WHERE owner = 'schema' AND table_name LIKE '%tablename%';
v_qry := 'SELECT '|| v_column_name || ' from tablename';
v_flag := 1;
v_file := utl_file.fopen('filename.txt','w');

OPEN ref_cur FOR v_qry;

LOOP
    FETCH ref_cur BULK COLLECT INTO v_tab LIMIT 100;
    FOR i IN 1..v_tab.count LOOP
        utl_file.put_line(v_file,v_tab(i));  -- WRITE INTO FILE
    END LOOP;

    EXIT WHEN v_tab.count = 0;
END LOOP;

CLOSE ref_cur;
utl_file.fclose(v_file);  -- CLOSE FILE
v_flag := 2;
dbms_output.put_line('Success');
         UTL_FILE.FCLOSE_ALL;
END;

Вывод файла выглядит следующим образом:

ABCDEF

Вывод файла должен выглядеть следующим образом:

AB "C"D" E "" F "

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Оберните ваши двойные кавычки в одинарные кавычки и объедините.

    select '"'||'test'||'"' test from dual;

выходы:

    "test"
0 голосов
/ 04 мая 2019

Добавить выражение CASE в запросе LISTAGG.

Пример:

SELECT LISTAGG(CASE 
                 WHEN column_name LIKE '%NAME%' 
                   THEN '''"''||' || column_name || '||''"'''  
                 ELSE column_name 
               END, '||CHR(9)||' ) 
         WITHIN GROUP (ORDER BY column_id) AS v_column_name 
FROM   all_tab_cols 
WHERE  owner = 'HR' 
       AND table_name = 'DEPARTMENTS'; 

, что дает

DEPARTMENT_ID||CHR(9)||'"'||DEPARTMENT_NAME||'"'||CHR(9)||MANAGER_ID||CHR(9)||LOCATION_ID

Запуск в качестве запроса

SELECT department_id
       || CHR(9)||'"'|| department_name||'"'||CHR(9)||MANAGER_ID||CHR(9)
       || location_id as output
FROM departments;   

OUTPUT                           
10  "Administration"    200 1700      
20  "Marketing" 201 1800           
30  "Purchasing"    114 1700          
40  "Human Resources"   203 2400     
50  "Shipping"  121 1500            
60  "IT"    103 1400                  
70  "Public Relations"  204 2700  
...
...
...