【发布时间】:2019-08-23 09:45:03
【问题描述】:
我想将一组 sql 查询转换为过程,而无需创建和删除中间表。我在下面包含了示例查询。这样做的最佳方法是什么?由于我对程序不熟悉,因此可以建议我如何做到这一点。
我们可以在程序中使用游标来做到这一点吗?在查询的最后一行,我加入了 2 个中间表。而不是我们可以加入两个光标吗?如果是这样,我们该怎么做?有没有办法做到这一点。请给我建议。
从 master_copy WHERE ZERO_BAL_CODE IN (1) 创建表 A 作为 SELECT ID_LOAN;
CREATE TABLE B AS SELECT master_copy.ID_LOAN,LOAN_AGE,master_copy.vintage,DELINQ_STATUS,ZERO_BAL_CODE,master_copy.ACTUAL_LOSS,current_upb FROM master_copy INNER JOIN A ON master_copy.ID_LOAN= A.ID_LOAN;
CREATE TABLE prepaidData AS SELECT ID_LOAN,max(to_number(DELINQ_STATUS)) as DELINQ_STATUS,max(loan_age) AS LOAN_AGE,max(ZERO_BAL_CODE) as ZERO_BAL_CODE,max(vintage) as vintage, min(ACTUAL_LOSS) as actual_loss,MIN(NULLIF(current_upb,0)) as current_upb FROM B group by id_loan; alter table prepaiddata add loan_type varchar2(255) default 'prepaid';
删除表a; 删除表 b;
创建表 A 作为 SELECT ID_LOAN FROM master_copy WHERE ZERO_BAL_CODE IN (3);
CREATE TABLE B AS SELECT master_copy.ID_LOAN,LOAN_AGE,master_copy.vintage,DELINQ_STATUS,ZERO_BAL_CODE,master_copy.ACTUAL_LOSS,current_upb FROM master_copy INNER JOIN A ON master_copy.ID_LOAN= A.ID_LOAN;
CREATE TABLE DEFAULT_FORECLOSURE AS SELECT ID_LOAN,max(to_number(DELINQ_STATUS)) as DELINQ_STATUS,max(loan_age) AS LOAN_AGE,max(ZERO_BAL_CODE) as ZERO_BAL_CODE,max(vintage) as vintage, min(ACTUAL_LOSS) as actual_loss,MIN(NULLIF(current_upb,0)) as current_upb FROM B group by id_loan; 改变表 DEFAULT_FORECLOSURE 添加 loan_type varchar2(255) default 'default_foreclosure';
删除表a; 删除表 b;
create table aa_loan_type as(select * from prepaiddata union select * from DEFAULT_FORECLOSURE);
【问题讨论】:
标签: oracle oracle11g cursor procedure