【发布时间】:2013-12-09 19:25:47
【问题描述】:
我需要使用 SQL 结果集以便对每一列进行一些处理(包括中位数、标准差、多个控制语句)
SQL 是动态的,所以我不知道列数、行数。
首先我尝试使用临时表、视图等来存储结果,但是在使用以下 sql 时我没有设法克服 Oracle 列的 30 个字符的限制:
create table (or view or global temporary table) as select * from (
SELECT
DMTTBF_MAT_MATURATO_BILL_POS.MAT_V_COD_ANNOMESE,
SUM(DMTTBF_MAT_MATURATO_BILL_POS.MAT_N_NUM_EVENTI_CHZ +DMTTBF_MAT_MATURATO_BILL_POS. MAT_N_NUM_EVENTI) <-- exceeds the 30 character limit
FROM DMTTBF_MAT_MATURATO_BILL_POS
WHERE DMTTBF_MAT_MATURATO_BILL_POS.MAT_V_COD_ANNOMESE >= '201301'
GROUP BY DMTTBF_MAT_MATURATO_BILL_POS.MAT_V_COD_ANNOMESE
)
第二个选择是使用一些 PL/SQL 类型来存储整个表信息,所以我可以像在其他编程语言中一样调用它(例如矩阵结果 [i][j]),但我找不到类似的东西。
第三种变体,使用文件进行读写:我还没有尝试过;我仍然期待一个更优雅的 pl/sql 解决方案
这可能是我的方法有误,所以任何建议都非常受欢迎。
更新:修改输入 SQL 不是一种选择。程序必须接受任何选择语句。
【问题讨论】:
-
一定喜欢 Oracle 的 30 个字符限制。
-
在这种情况下,您必须使用DBMS_SQL 包,在那里您可以动态解析任何SQL 语句并读取每个记录和字段。在此处查看 Oracle 文档:DBMS_SQL