【问题标题】:ORA-01790: expression must have same datatype as corresponding expression LISTAGGORA-01790: 表达式必须与对应的表达式 LISTAGG 具有相同的数据类型
【发布时间】:2018-07-24 11:43:52
【问题描述】:

我有 3 个视图的联合。视图中的数据类型相同,但我收到错误“ORA-01790:表达式必须具有与相应表达式相同的数据类型”。最后一个联合有一个转换为 varchar 的 clob 以与上述视图匹配。我在下面给出代码。请帮我解决这个问题

SELECT
ROWNUM rownum_1,
customer_trx_id,
customer_trx_line_id,
item_name,
quantity_invoiced,
unit_selling_price,
extended_amount,
line_number,
row_num,
line_description,
tax_perc,
line_total,
tax_amount,
uom,
po_line FROM
apps.gnet_bpa_inv_lines_cons
WHERE
    :p_summary = 'N'
AND
    customer_trx_id = 3725097
UNION ALL
SELECT
ROWNUM rownum_1,
customer_trx_id,
customer_trx_line_id,
item_name,
quantity_invoiced,
unit_selling_price,
extended_amount,
line_number,
row_num,
line_description,
tax_perc,
line_total,
tax_amount,
uom,
po_line
FROM
apps.gnet_bpa_inv_lines_cons_summ
WHERE
    :p_summary = 'Y'
AND
    customer_trx_id = 3725097
UNION ALL
SELECT
MAX(ROWNUM) rownum_1,
customer_trx_id AS customer_trx_id,
MAX(customer_trx_line_id) AS customer_trx_line_id,
dbms_lob.substr(
    XMLAGG(xmlelement(e,item_name,',').extract('//text()') ORDER BY 
po_line).getclobval(),
    4000,
    1
) AS item_name,
LISTAGG(quantity_invoiced,',') WITHIN GROUP(ORDER BY po_line) AS 
quantity_invoiced,
MAX(unit_selling_price) AS unit_selling_price,
SUM(extended_amount) AS extended_amount,
MAX(line_number) AS line_number,
LISTAGG(row_num,',') WITHIN GROUP(ORDER BY po_line) AS row_num,
dbms_lob.substr(
    XMLAGG(xmlelement(e,line_description,',').extract('//text()') ORDER BY 
po_line).getclobval(),
    4000,
    1
) AS line_description,
LISTAGG(tax_perc,',') WITHIN GROUP(ORDER BY po_line) AS tax_perc,
LISTAGG(tax_amount,',') WITHIN GROUP(ORDER BY po_line) AS tax_amount,
SUM(line_total) AS line_total,
LISTAGG(uom,',') WITHIN GROUP(ORDER BY po_line) AS uom,
po_line
FROM
apps.gnet_bpa_inv_lines_cons
WHERE
    :p_summary = 'P'
AND
    customer_trx_id = 3725097
GROUP BY
po_line,
customer_trx_id
ORDER BY rownum_1;

【问题讨论】:

  • 你有没有做任何工作来找出导致错误的查询部分?
  • 列的原始数据类型是什么?

标签: sql oracle clob listagg


【解决方案1】:
LISTAGG(tax_perc,',') WITHIN GROUP(ORDER BY po_line) AS tax_perc,
LISTAGG(tax_amount,',') WITHIN GROUP(ORDER BY po_line) AS tax_amount,

是最后一个联合中的 char/varchar 数据类型,因为它们在前两个部分中是数字/十进制。像这样检查其他列,您的问题应该得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多