表:tb_jsgs
-- Create table
create table TB_JSGS
(
ID NUMBER(1),
MC VARCHAR2(100),
SL NUMBER(5),
BZ_MIN NUMBER(2),
BZ_MAX NUMBER(2)
);
-- Add comments to the columns
comment on column TB_JSGS.MC
is '名称';
comment on column TB_JSGS.SL
is '数量';
comment on column TB_JSGS.BZ_MIN
is '比重(最小)';
comment on column TB_JSGS.BZ_MAX
is '比重(最大)';insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (1, '名称1', 20, 1, 10);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (2, '名称2', 25, 2, 9);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (3, '名称3', 30, 1, 9);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (4, '名称4', 15, 4, 7);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (5, '名称5', 19, 1, 9);---表tb_jsgs记录(9条记录以内,数量是动态的)
ID MC SL BZ_MIN BZ_MAX
1 名称1 20 1 10
2 名称2 25 2 9
3 名称3 30 1 9
4 名称4 15 4 7
5 名称5 19 1 9 -- Create table
create table TB_DATA
(
BZZH VARCHAR2(100),
JSSL NUMBER(5)
);
-- Add comments to the columns
comment on column TB_DATA.BZZH
is '比重组合';
comment on column TB_DATA.JSSL
is '计算数量';-----表TB_DATA记录很多
BZZH JSSL
1,2,1,4,1 19
……………………其中TB_DATA表的数据是利用存储过程,按照一定规则根据表tb_jsgs记录循环求出来的,规则如下:for V_NUM1 in 1 .. 10 loop --名称1 循环BZ_MIN 到BZ_MAX
for V_NUM2 in 2 .. 9 loop --名称2 循环BZ_MIN 到BZ_MAX
for V_NUM3 in 1 .. 9 loop --名称3 循环BZ_MIN 到BZ_MAX
for V_NUM4 in 4 .. 7 loop --名称4 循环BZ_MIN 到BZ_MAX
for V_NUM5 in 1 .. 9 loop --名称5 循环BZ_MIN 到BZ_MAX insert into TB_DATA
(BZZH, JSSL)
values
(to_char(V_NUM1) || ',' || to_char(V_NUM2) || ',' ||
to_char(V_NUM3) || ',' || to_char(V_NUM4) || ',' ||
to_char(V_NUM5),
trunc((V_NUM1*20+V_NUM2*25+V_NUM3*30+V_NUM4*15+V_NUM5*19)
/(V_NUM1+V_NUM2+V_NUM3+V_NUM4+V_NUM5))); end loop;
end loop;
end loop;
end loop;
end loop;我的问题:
表tb_jsgs的记录数是动态的,怎么写出通用的存储过程???
-- Create table
create table TB_JSGS
(
ID NUMBER(1),
MC VARCHAR2(100),
SL NUMBER(5),
BZ_MIN NUMBER(2),
BZ_MAX NUMBER(2)
);
-- Add comments to the columns
comment on column TB_JSGS.MC
is '名称';
comment on column TB_JSGS.SL
is '数量';
comment on column TB_JSGS.BZ_MIN
is '比重(最小)';
comment on column TB_JSGS.BZ_MAX
is '比重(最大)';insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (1, '名称1', 20, 1, 10);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (2, '名称2', 25, 2, 9);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (3, '名称3', 30, 1, 9);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (4, '名称4', 15, 4, 7);
insert into tb_jsgs (ID, MC, SL, BZ_MIN, BZ_MAX)
values (5, '名称5', 19, 1, 9);---表tb_jsgs记录(9条记录以内,数量是动态的)
ID MC SL BZ_MIN BZ_MAX
1 名称1 20 1 10
2 名称2 25 2 9
3 名称3 30 1 9
4 名称4 15 4 7
5 名称5 19 1 9 -- Create table
create table TB_DATA
(
BZZH VARCHAR2(100),
JSSL NUMBER(5)
);
-- Add comments to the columns
comment on column TB_DATA.BZZH
is '比重组合';
comment on column TB_DATA.JSSL
is '计算数量';-----表TB_DATA记录很多
BZZH JSSL
1,2,1,4,1 19
……………………其中TB_DATA表的数据是利用存储过程,按照一定规则根据表tb_jsgs记录循环求出来的,规则如下:for V_NUM1 in 1 .. 10 loop --名称1 循环BZ_MIN 到BZ_MAX
for V_NUM2 in 2 .. 9 loop --名称2 循环BZ_MIN 到BZ_MAX
for V_NUM3 in 1 .. 9 loop --名称3 循环BZ_MIN 到BZ_MAX
for V_NUM4 in 4 .. 7 loop --名称4 循环BZ_MIN 到BZ_MAX
for V_NUM5 in 1 .. 9 loop --名称5 循环BZ_MIN 到BZ_MAX insert into TB_DATA
(BZZH, JSSL)
values
(to_char(V_NUM1) || ',' || to_char(V_NUM2) || ',' ||
to_char(V_NUM3) || ',' || to_char(V_NUM4) || ',' ||
to_char(V_NUM5),
trunc((V_NUM1*20+V_NUM2*25+V_NUM3*30+V_NUM4*15+V_NUM5*19)
/(V_NUM1+V_NUM2+V_NUM3+V_NUM4+V_NUM5))); end loop;
end loop;
end loop;
end loop;
end loop;我的问题:
表tb_jsgs的记录数是动态的,怎么写出通用的存储过程???
解决方案 »
- 求有安装ORACLE 11G RAC经验的哥哥们帮下忙
- 寻找ORACLE的学习方向
- set arraysize n的理解 我理解的对不?
- Oracle9i如何实现分区按月存储
- 如何监控oracle数据库运行了哪些sql命令
- 请问如何把字符串的日期'20050123101113'转换成日期格式2005-1-23 10:11:13?
- oracle8i for windowsNT实用指南上第四章的source code。看不懂。
- convert函数什么意思,具体怎么用
- 急!求助大家一个SQL的问题!
- Oracle 使用domain index的查询能否重载>,<,=
- 存储过程执行不完?
- oralce的datediff问题。
trunc((V_NUM1*20+V_NUM2*25+V_NUM3*30+V_NUM4*15+V_NUM5*19) /(V_NUM1+V_NUM2+V_NUM3+V_NUM4+V_NUM5)))其中:
V_NUM1、V_NUM2、V_NUM3、V_NUM4、V_NUM5是5重循环的变量(范围是TB_JSGS.BZ_MIN到TB_JSGS.BZ_MAX),
V_NUM1*20+V_NUM2*25+V_NUM3*30+V_NUM4*15+V_NUM5*19中的20、25、30、15、19是TB_JSGS.sl字段。
declare
cursor c1 is select id,bz_min,bz_max,sl
from tb_jsgs
order by id;
v_str varchar2(4000);
v_str_end varchar2(4000);
v_col1 varchar2(4000);
v_col2 varchar2(4000);
v_insert varchar2(4000);
v_col3 varchar2(4000);
v_exe varchar2(4000);
begin
for a in c1 loop
v_str := v_str||' for v_num'||a.id||' in '||a.bz_min||'..'||a.bz_max||' loop ';
v_str_end := v_str_end||' end loop;';
v_col1 := v_col1||' to_char(v_num'||a.id||')||'',''||';
v_col2 := v_col2||' v_num'||a.id||'*'||a.sl||'+';
v_col3 := v_col3||' v_num'||a.id||'+';
end loop;
v_insert := 'insert into tb_data(bzzh,jssl) values('||rtrim(v_col1,'||'',''||')||', trunc(('||rtrim(v_col2,'+')||')/('||rtrim(v_col3,'+')||')));';
v_exe := 'begin '||v_str||' '||v_insert||' '||v_str_end||' end;';
execute immediate v_exe;
end;
让我想起了当年的foxpro