у меня есть таблица t1 с именами базовых таблиц и именами их столбцов.Я хочу создать сценарий для каждой таблицы с заголовком столбца, разделенным разделителем канала.
create table t1 (table_nm varchar2(10) , col_nm varchar2(20));
INSERT INTO T1 SELECT 'AAA' , 'FNAME' FROM DUAL UNION ALL
SELECT 'AAA' , 'LNAME' FROM DUAL UNION ALL
SELECT 'AAA' , 'PH_NO' FROM DUAL UNION ALL
SELECT 'BBB' , 'LAST_NM' FROM DUAL UNION ALL
SELECT 'BBB' , 'EMAIL' FROM DUAL ;
COMMIT;
код, который я пытаюсь.
SELECT * FROM
(
WITH ABC AS (SELECT TABLE_NM, RTRIM(XMLAGG(XMLELEMENT(E,COL_NM,'|').EXTRACT('//text()') ORDER BY COL_NM).GETCLOBVAL(),'|') AS COL
from t1 group by table_nm)
select
'set termout off '||chr(10)||
'set timing off '||chr(10)||
'set echo off '||chr(10)||
'set feedback off '||chr(10)||
'set linesize 104 '||chr(10)||
'set pagesize 0 '||CHR(10)||
'spool /tmp/'||abc.TABLE_NM||'.csv '||CHR(10)||
'SELECT '||''''||COL||''''||' FROM DUAL;'||CHR(30)||
'select '||COL||' from '||abc.table_nm||';'||chr(10)||
'spool off' EXTRACT
FROM ABC
);
ошибок, которые я получаю с фактическими данными.
1) ORA-00996: оператор конкатенации ||, не |
ожидаемые файлы / вывод
AAA.dat
FNAME|LNAME|PH_NO
.... some values with pipe delimiter
...
BBB.dat
LAST_NM|EMAIL
some values with pipe delimiter
Не могли бы вы помочь мне в этом.
Я изменил вопрос и удалил первую проблему.да, мне не нужно ||на последнем .. я также изменил в запросеПосле выполнения приведенного выше кода в SQL-разработчике я получаю вывод наподобие
"set termout off
set timing off
set echo off
set feedback off
set linesize 104
set pagesize 0
spool /tmp/AAA.dat
SELECT 'FNAME|LNAME|PH_NO' FROM DUAL;
SELECT FNAME|LNAME|PH_NO FROM AAA;
spool off"
, второй оператор выбора выдает ошибку как:
SELECT FNAME|LNAME|PH_NO FROM AAA;
ORA-00996: the concatenate operator is ||, not |
00996. 00000 - "the concatenate operator is ||, not |"
Есть ли другой подход для обработки этого