将Oracle SQL数据导出为CSV格式时出现ORA-00923错误

我正在尝试将oracle数据导出为CSV格式,并且select语句具有名为'type'的列,其硬编码值为msisdn。请注意,在任何表中都没有这样的名为type的列,但这是我需要包含在CSV中的列标题。

以下是我的查询,但是我在期望的位置找不到关键字Ora-00923。

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,en_GB
4921767493,de_DE
qq8719730 回答:将Oracle SQL数据导出为CSV格式时出现ORA-00923错误

在SELECT子句中,连接所需的所有值(包括逗号等),并在AS后面写所有列标题(根据需要)。

测试表:

create table individual ( id,status,language )
as
select 1000,'1','en' from dual union all
select 1001,'en' from dual union all
select 1002,'de' from dual union all
select 2000,'2','es' from dual union all
select 2001,'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,locale                               
-----------------------------------------------------
9321767493,MSISDN,en_IN                              
4421767493,en_GB                              
4921767493,de_DE 

在命令行(例如Oracle 18c,sqlcl)上,您可以执行以下操作:

SQL> set sqlformat csv
SQL> select
  2     m.msisdn || ',' || i.language || '_' || m.country
  3     as "identifier,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,locale"
"9321767493,en_IN"
"4421767493,en_GB"
"4921767493,de_DE" 

此外,在编写内部联接时,您可以/应该使用JOIN ... ON ...

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

DBfiddle here.

本文链接:https://www.f2er.com/3153549.html

大家都在问