oracle存储过程动态列,存储过程动态列解决思路

存储过程动态列

比如有两张表结构如下:

KHH         ZXYZ         YZPF(得分)

001          123            2

002          111            3

003          112            1

004          113            2

...         ...    ...        ...    ....

另一张表:

ID      ZBMC

123      年龄

111      文化程度

112      投资偏好

113      平仓情况

现在想实现一个存储过程的报表统计,没有选择某个字段则效果如下:

得分   年龄  文化程度   投资偏好  ...

0      2     0         0   ...

1      3     0         0   ...

2      0     1         0   ...

3      0     0         2   ...

如果只选择年龄其它的字段不会出现,效果如下:

得分   年龄

0      2

1      3

2      0

3      0

------解决方案--------------------

这个 还算不上是动态列

if(选择全部)

select * from ..

else

select 选择值 from ..

------解决方案--------------------

可以先定义一个串变量,拼一个创建临时表的ddl语句,然后用 execute immediate 执行创建表

------解决方案--------------------

create table t1(khh varchar2(16),id int,yzpf int);

insert into t1 values ('001',123,2);

insert into t1 values ('002',111,3);

insert into t1 values ('003',112,1);

insert into t1 values ('004',113,2);

create table t2(id int,zbmc varchar2(16));

insert into t2 values(123,'年龄');

insert into t2 values(111,'文化程度');

insert into t2 values(112,'投资偏好');

insert into t2 values(113,'平仓情况');

declare

--下面的变量都可以作为参数传入PL中

--总字符串

v_str varchar2(40):='年龄,文化程度';

--需要分割的数量

v_str_num int :=2;

--各个子串的长度

length_str1 int :=2;

length_str2 int :=4;

begin

--用substr分割

--分割后的子串拼入下面的建表语句,建内存表也可以,并发比较好。

execute immediate 'create table temp1()';

end;

------解决方案--------------------

实在不行就用java搞吧,java截字符串还是比较简单的。

ss = tempString.split(" ");

//    System.out.println(ss[0]);

//    System.out.println(ss[1]);

//    System.out.println(ss[2]);

//    System.out.println(ss[3]);

------解决方案--------------------

引用:大神具体点

Quote: 引用:这个 还算不上是动态列

if(选择全部)

select * from ..

else

select 选择值 from ..判断入参是否为空,空就select * from ..,不空就构造选择列再select

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值