首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导致ORA-01790:表达式的Union必须与相应表达式具有相同的数据类型

导致ORA-01790:表达式的Union必须与相应表达式具有相同的数据类型
EN

Stack Overflow用户
提问于 2013-02-15 00:23:38
回答 1查看 17.8K关注 0票数 1

以下面的查询为例:

代码语言:javascript
运行
复制
  select p.product_id, p.product_name, 
     product_type as product_type,
      from products
    group by p.product_id, p.product_name
  union
    select p.product_id, p.product_name, 
     cast(collect(coalesce(product_type, decode(product_description,null,'DESCR' || '-' product_description) as my_type) as product_type,
    from products
    group by p.product_id, p.product_name

第一个查询中的select语句将product_type作为varchar返回,第二个查询中的product_type的类型为my_type。这导致和ORA-01790:表达式必须具有与相应表达式相同的数据类型,因为数据类型不同。

是否可以将第一个查询的product_type强制转换为my_type类型?

我尝试更改第一个查询,如下所示,但没有成功。

代码语言:javascript
运行
复制
select p.product_id, p.product_name, 
     cast(product_type as my_type) as product_type,
     decode(product_source_location, null, 'NO_SOURCE', product_source_location)
    from products
    group by p.product_id, p.product_name

编辑

my_type被定义为'TYPE "my_type" AS TABLE OF varchar2(4000)'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 00:37:55

我认为你不能在SQL中进行这样的转换。但在PL/SQL中,您可以:

代码语言:javascript
运行
复制
CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (255)
/

DECLARE
  tab STRARRAY;
  cnt NUMBER:= 0;
BEGIN
 SELECT COUNT(*)
  INTO cnt
   FROM TABLE(CAST(tab AS strarray));
  dbms_output.put_line(cnt);
END;
/

我想我之前的假设是错的。我没有删除它,因为它仍然是有效的例子。下面的示例使用COLLECT作为table_type类型转换现有表列(emp表):

代码语言:javascript
运行
复制
CREATE OR REPLACE TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);
/

SELECT deptno
    , CAST(COLLECT(ename) AS varchar2_ntt) AS emps
  FROM   scott.emp
GROUP  BY deptno
/

-- This is dumb but works:

SELECT deptno
     , CAST(COLLECT(ename) AS varchar2_ntt) AS emps
  FROM   scott.emp
 GROUP  BY deptno
 UNION ALL
 SELECT deptno
     , CAST(COLLECT(ename) AS varchar2_ntt) AS emps
   FROM   scott.emp
  GROUP  BY deptno
 /
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14879364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档