Ошибка ora-00923 при экспорте данных Oracle OQL в формат CSV - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь экспортировать данные оракула в формат CSV, и в операторе select есть столбец с именем «type» с жестко заданным значением MSISDN. Обратите внимание, что ни в одной из таблиц такого столбца с именем type нет, но это заголовок столбца, который мне нужно включить в CSV.

Ниже приведен мой запрос, однако я получаю Ora-00923 Из ключевого слова notнайдено там, где ожидается.

select
   /*+ parallel(i,24) parallel(m,24) */
   m.msisdn as "identifier" || ',' || 'MSISDN' as "type" ||','|| i.language || '_' || m.country 
from
    individual i,
    msisdn m 
where
   i.individual_id = m.individual_id 
   and i.account_status = '1' 
   and rownum < 11;

Где ошибка в моем запросе?

Ожидаемый результат:

identifier,type,locale
9321767493,MSISDN,en_IN
4421767493,MSISDN,en_GB
4921767493,MSISDN,de_DE

1 Ответ

0 голосов
/ 06 ноября 2019

В предложении SELECT объедините все необходимые значения (включая запятые и т. Д.) И запишите все заголовки столбцов (при необходимости) после AS.

Таблицы для тестирования:

create table individual ( id, status, language )
as
select 1000, '1', 'en' from dual union all
select 1001, '1', 'en' from dual union all
select 1002, '1', 'de' from dual union all
select 2000, '2', 'es' from dual union all
select 2001, '2', 'fr' from dual ;

create table msisdn ( individualid, msisdn, country )
as
select 1000, 9321767493, 'IN' from dual union all
select 1001, 4421767493, 'GB' from dual union all
select 1002, 4921767493, 'DE' from dual ;

Запрос

select
   m.msisdn || ',' || 'MSISDN' || ',' || i.language || '_' || m.country
   as "identifier,type,locale" 
from
    individual i,
    msisdn m 
where
   i.id = m.individualid 
   and i.status = '1' 
   and rownum < 11;

-- result
identifier,type,locale                               
-----------------------------------------------------
9321767493,MSISDN,en_IN                              
4421767493,MSISDN,en_GB                              
4921767493,MSISDN,de_DE 

В командной строке (например, Oracle 18c, sqlcl) вы можете сделать следующее:

SQL> set sqlformat csv
SQL> select
  2     m.msisdn || ',' || 'MSISDN' || ',' || i.language || '_' || m.country
  3     as "identifier,type,locale" 
  4  from
  5      individual i,
  6      msisdn m 
  7  where
  8     i.id = m.individualid 
  9     and i.status = '1' 
 10     and rownum < 11;

-- output
"identifier,type,locale"
"9321767493,MSISDN,en_IN"
"4421767493,MSISDN,en_GB"
"4921767493,MSISDN,de_DE" 

Кроме того, вы можете / должны использовать JOIN ... ON ... при записи внутренних объединений, например,

select
   m.msisdn || 'MSISDN' || i.language || '_' || m.country
   as "identifier,type,locale" 
from
   individual i join msisdn m on i.id = m.individualid 
where
       i.status = '1' 
   and rownum < 11;

DBfiddle здесь.

...