我已经写了下面的透视查询,但它不显示任何输出行。它只是显示PL/SQL过程成功完成。
DECLARE
expression CLOB;
BEGIN
SELECT LISTAGG('''' || MONTH || ''' AS "' || MONTH || '"', ', ')
INTO expression
FROM (SELECT DISTINCT MONTH FROM USER_AGREEMENT);
expression:= 'SELECT *
FROM (
SELECT AGGREMENTID, MONTH, AMOUNT
FROM USER_AGREEMENT
)
PIVOT (
SUM(AMOUNT)
FOR MONTH IN (' || expression ||')
)';
EXECUTE IMMEDIATE expression;
END;
我尝试使用DBMS_OUTPUT.put_line(expression);但它不起作用
1条答案
按热度按时间brccelvz1#
EXECUTE IMMEDIATE
执行一个语句;它不显示任何内容。如果你想显示一些东西,那么你需要使用
DBMS_OUTPUT
并循环遍历语句中的值:或:
其中,对于样本数据:
两个输出:
但是,如果你知道只有12个不同的月份,那么你可能不需要动态查询:
其输出:
| AGGREMENTID|一月|二月|三月|四月|可以|六月|七月|八月|九月|十月|十一月|十二月|
| --|--|--|--|--|--|--|--|--|--|--|--|--|
| 1 | 6 | 3 |* 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 |
| 2 | 15 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 *|
fiddle