oracle存储过程笔记...
时间:2010-08-09 来源:ital214
oracle存储过程笔记
1。第一个: 这是一个简单的把一条数据插入到某一个表中的sql执行: exec p_test;
Java 代码 < pluginspage=http://www.macromedia.com/go/getflashplayer src=http://zhzhiqun2005.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf width=14 height=15 type=application/x-shockwave-flash flashvars="clipboard=CREATE%20OR%20REPLACE%20PROCEDURE%20p_test%0A%20%20is%0A%20%20v_id%20%20%20%20TJ_JTCD.Id%25TYPE%3B%0A%20%20v_zgrs%20%20TJ_JTCD.ZGRS%25TYPE%3B%0A%20%20v_qys%20%20%20TJ_JTCD.QYS%25TYPE%3B%0A%20%20v_date%20%20TJ_JTCD.Createdate%25TYPE%3B%0A%20%20CURSOR%20%20%20c_emp%20%20%20IS%20%20%20SELECT%20%20%202%2C1%2C1%2Csysdate%20%20%20FROM%20%20%20dual%3B%20%20%20--%E8%BF%99%E9%87%8C%E5%88%9B%E5%BB%BA%E4%BA%86%E4%B8%80%E4%B8%AA%E6%B8%B8%E6%A0%87%20c_emp%0A%0A%20%20BEGIN%0A%20%20OPEN%20%20%20c_emp%3B%20%20%20%20%20--%E6%89%93%E5%BC%80%E8%BF%99%E4%B8%AA%E6%B8%B8%E6%A0%87%0A%20%20LOOP%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%E5%81%9A%E5%BE%AA%E7%8E%AF%0A%20%20FETCH%20%20%20c_emp%20%20%20INTO%20%20%20v_id%2Cv_zgrs%2Cv_qys%2Cv_date%3B%0A%20%20EXIT%20%20%20WHEN%20%20%20c_emp%25NOTFOUND%3B%20%20%20%20--%E5%BD%93%E6%B2%A1%E6%9C%89%E7%BB%93%E6%9E%9C%E9%9B%86%E4%BB%A5%E5%90%8E%2C%E5%B0%B1%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%0A%20%20insert%20into%20tj_jtcd%20values(v_id%2Cv_zgrs%2Cv_qys%2Cv_date)%3B%0A%20%20END%20loop%3B%0A%20end%20p_test%3B" quality="high" allowscriptaccess="always">
- CREATE OR REPLACE PROCEDURE p_test
- is
- v_id TJ_JTCD.Id%TYPE;
- v_zgrs TJ_JTCD.ZGRS%TYPE;
- v_qys TJ_JTCD.QYS%TYPE;
- v_date TJ_JTCD.Createdate%TYPE;
- CURSOR c_emp IS SELECT 2,1,1,sysdate FROM dual; --这里创建了一个游 标 c_emp
- BEGIN
- OPEN c_emp; -- 打开这个游标
- LOOP --做循环
- FETCH c_emp INTO v_id,v_zgrs,v_qys,v_date;
- EXIT WHEN c_emp%NOTFOUND; -- 当没有结果集以后,就结束循环
- insert into tj_jtcd values(v_id,v_zgrs,v_qys,v_date);
- END loop;
- end p_test;
CREATE OR REPLACE PROCEDURE p_test is v_id TJ_JTCD.Id%TYPE; v_zgrs TJ_JTCD.ZGRS%TYPE; v_qys TJ_JTCD.QYS%TYPE; v_date TJ_JTCD.Createdate%TYPE; CURSOR c_emp IS SELECT 2,1,1,sysdate FROM dual; --这里创建了一个游标 c_emp BEGIN OPEN c_emp; --打开这个游标 LOOP --做循环 FETCH c_emp INTO v_id,v_zgrs,v_qys,v_date; EXIT WHEN c_emp%NOTFOUND; --当没有结果集以后,就结束循环 insert into tj_jtcd values(v_id,v_zgrs,v_qys,v_date); END loop; end p_test;
2。第二个: 是从一个表中查出来多条数据,然后把这多条数据通过循环插入到某一个表中
执行: exec p_test;
Java 代码 < pluginspage=http://www.macromedia.com/go/getflashplayer src=http://zhzhiqun2005.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf width=14 height=15 type=application/x-shockwave-flash flashvars="clipboard=CREATE%20OR%20REPLACE%20PROCEDURE%20p_test%0A%20%20is%0A%20%20v_id%20%20%20%20TJ_JTCD.Id%25TYPE%3B%0A%20%20--v_zgrs%20%20TJ_JTCD.ZGRS%25TYPE%3B%0A%20%20--v_qys%20%20%20TJ_JTCD.QYS%25TYPE%3B%0A%20%20v_date%20%20TJ_JTCD.Createdate%25TYPE%3B%0A%20%20CURSOR%20%20%20c_emp%20%20%20IS%20%20%20%0A%20%20select%20t.wgno%20from%20p_wginfo%20t%20where%20t.wgtype%20%3D%203%3B%0A%20%20--SELECT%20%20%202%2C1%2C1%2Csysdate%20%20%20FROM%20%20%20dual%3B%20%20%20--%E8%BF%99%E9%87%8C%E5%88%9B%E5%BB%BA%E4%BA%86%E4%B8%80%E4%B8%AA%E6%B8%B8%E6%A0%87%20c_emp%0A%0A%20%20BEGIN%0A%20%20OPEN%20%20%20c_emp%3B%20%20%20%20%20--%E6%89%93%E5%BC%80%E8%BF%99%E4%B8%AA%E6%B8%B8%E6%A0%87%0A%20%20LOOP%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%E5%81%9A%E5%BE%AA%E7%8E%AF%0A%20%20FETCH%20%20%20c_emp%20%20%20INTO%20%20%20v_id%3B%20--%2Cv_zgrs%2Cv_qys%2Cv_date%3B%0A%20%20EXIT%20%20%20WHEN%20%20%20c_emp%25NOTFOUND%3B%20%20%20%20--%E5%BD%93%E6%B2%A1%E6%9C%89%E7%BB%93%E6%9E%9C%E9%9B%86%E4%BB%A5%E5%90%8E%2C%E5%B0%B1%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%0A%20%20%0A%20%20insert%20into%20tj_jtcd%20values(tjfx_sequence.nextval%2C1%2C1%2Cv_date%2Cv_id)%3B%0A%20%20END%20loop%3B%0A%20%20commit%3B%0A%20end%20p_test%3B%0A" quality="high" allowscriptaccess="always">
- CREATE OR REPLACE PROCEDURE p_test
- is
- v_id TJ_JTCD.Id%TYPE;
- --v_zgrs TJ_JTCD.ZGRS%TYPE;
- --v_qys TJ_JTCD.QYS%TYPE;
- v_date TJ_JTCD.Createdate%TYPE;
- CURSOR c_emp IS
- select t.wgno from p_wginfo t where t.wgtype = 3;
- --SELECT 2,1,1,sysdate FROM dual; --这里创建了一个游 标 c_emp
- BEGIN
- OPEN c_emp; -- 打开这个游标
- LOOP --做循环
- FETCH c_emp INTO v_id; --,v_zgrs,v_qys,v_date;
- EXIT WHEN c_emp%NOTFOUND; -- 当没有结果集以后,就结束循环
- insert into tj_jtcd values(tjfx_sequence.nextval,1,1,v_date,v_id);
- END loop;
- commit;
- end p_test;
CREATE OR REPLACE PROCEDURE p_test is v_id TJ_JTCD.Id%TYPE; --v_zgrs TJ_JTCD.ZGRS%TYPE; --v_qys TJ_JTCD.QYS%TYPE; v_date TJ_JTCD.Createdate%TYPE; CURSOR c_emp IS select t.wgno from p_wginfo t where t.wgtype = 3; --SELECT 2,1,1,sysdate FROM dual; --这里创建了一个游标 c_emp BEGIN OPEN c_emp; --打开这个游标 LOOP --做循环 FETCH c_emp INTO v_id; --,v_zgrs,v_qys,v_date; EXIT WHEN c_emp%NOTFOUND; --当没有结果集以后,就结束循环 insert into tj_jtcd values(tjfx_sequence.nextval,1,1,v_date,v_id); END loop; commit; end p_test;
3。 第三个: 两个游标的写法,并且第二个游标是带参数的.
执行: exec p_test;
Java 代码 < pluginspage=http://www.macromedia.com/go/getflashplayer src=http://zhzhiqun2005.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf width=14 height=15 type=application/x-shockwave-flash flashvars="clipboard=%0ACREATE%20OR%20REPLACE%20PROCEDURE%20p_test%0A%20%20is%0A%20--%20v_id%20%20%20%20TJ_JTCD.Id%25TYPE%3B%0A%20%20v_wgno%20%20%20%20tj_jtcd.wgno%25type%3B%0A%20%20v_zgrs%20%20%20%20tj_jtcd.zgrs%25type%3B%0A%20%20v_qys%20%20%20%20%20tj_jtcd.qys%25type%3B%0A%20%20v_ny%20%20%20%20%20%20tj_jtcd.ny%25type%3B%0A%0A%20%20CURSOR%20%20%20c_emp%20%20%20%20--%E6%B8%B8%E6%A0%871%0A%20%20IS%20%20%20%0A%20%20select%20t.wgno%20from%20p_wginfo%20t%20where%20t.wgtype%20%3D%203%3B%0A%20%20%0A%20%20CURSOR%20c2%20%20--%E6%B8%B8%E6%A0%872%0A%20%20IS%0A%20%20select%201%2C1%2C'1'%0A%20%20--sum(y.zgzs)%20as%20zgrs%2C%20count(*)%20as%20qys%2Cto_char(to_date(y.lhrq%2C%20'yyyy-mm-dd')%2C%20'yyyy-mm')%20as%20ny%20%0A%20%20%20from%20dual%20d%20%3B%0A%20%20%20--where%20y.id%20in(select%20b.zjj_id%20from%20b_Laodj_Jtcd%20b%20where%20b.ent_id%20in%20(select%20c.ent_id%20from%20c_ygdw%20c%20where%201%20%3D%201))%20group%20by%20to_char(to_date(y.lhrq%2C%20'yyyy-mm-dd')%2C%20'yyyy-mm')%3B%0A%0A%20%20BEGIN%0A%20%20OPEN%20%20%20c_emp%3B%20%20%20%20%20--%E6%89%93%E5%BC%80%E6%B8%B8%E6%A0%871%0A%20%20LOOP%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%E5%81%9A%E5%BE%AA%E7%8E%AF%0A%20%20FETCH%20%20%20c_emp%20%20%20INTO%20%20%20v_wgno%3B%20--%2Cv_zgrs%2Cv_qys%2Cv_date%3B%0A%20%20EXIT%20%20%20WHEN%20%20%20c_emp%25NOTFOUND%3B%20%20%20%20--%E5%BD%93%E6%B2%A1%E6%9C%89%E7%BB%93%E6%9E%9C%E9%9B%86%E4%BB%A5%E5%90%8E%2C%E5%B0%B1%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%0A%20%20%0A%20%20open%20c2%3B%0A%20%20LOOP%0A%20%20fetch%20c2%20into%20v_zgrs%2Cv_qys%2Cv_ny%3B%0A%20%20EXIT%20%20%20WHEN%20%20%20c2%25NOTFOUND%3B%0A%20%20insert%20into%20tj_jtcd(id%2Czgrs%2Cqys%2Ccreatedate%2Cwgno%2Cny)%20values(tjfx_sequence.nextval%2Cv_zgrs%2Cv_qys%2Csysdate%2Cv_wgno%2Cv_ny)%3B%20--%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%0A%20%20%0A%20%20end%20loop%3B%0A%20%20close%20c2%3B%0A%0A%20%20END%20loop%3B%0A%20%20CLOSE%20%20c_emp%3B%0A%20%20commit%3B%0A%20end%20p_test%3B%0A" quality="high" allowscriptaccess="always">
- CREATE OR REPLACE PROCEDURE p_test
- is
- -- v_id TJ_JTCD.Id%TYPE;
- v_wgno tj_jtcd.wgno%type;
- v_zgrs tj_jtcd.zgrs%type;
- v_qys tj_jtcd.qys%type;
- v_ny tj_jtcd.ny%type;
- CURSOR c_emp -- 游标1
- IS
- select t.wgno from p_wginfo t where t.wgtype = 3;
- CURSOR c2 -- 游标2
- IS
- select 1,1,'1'
- --sum(y.zgzs) as zgrs, count(*) as qys,to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm') as ny
- from dual d ;
- --where y.id in(select b.zjj_id from b_Laodj_Jtcd b where b.ent_id in (select c.ent_id from c_ygdw c where 1 = 1)) group by to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm');
- BEGIN
- OPEN c_emp; -- 打开游标1
- LOOP -- 做循环
- FETCH c_emp INTO v_wgno; --,v_zgrs,v_qys,v_date;
- EXIT WHEN c_emp%NOTFOUND; -- 当没有结果集以后,就结束循环
- open c2;
- LOOP
- fetch c2 into v_zgrs,v_qys,v_ny;
- EXIT WHEN c2%NOTFOUND;
- insert into tj_jtcd(id,zgrs,qys,createdate,wgno,ny) values(tjfx_sequence.nextval,v_zgrs,v_qys,sysdate,v_wgno,v_ny); -- 插入数据
- end loop;
- close c2;
- END loop;
- CLOSE c_emp;
- commit;
- end p_test;
CREATE OR REPLACE PROCEDURE p_test is -- v_id TJ_JTCD.Id%TYPE; v_wgno tj_jtcd.wgno%type; v_zgrs tj_jtcd.zgrs%type; v_qys tj_jtcd.qys%type; v_ny tj_jtcd.ny%type; CURSOR c_emp --游标1 IS select t.wgno from p_wginfo t where t.wgtype = 3; CURSOR c2 --游标2 IS select 1,1,'1' --sum(y.zgzs) as zgrs, count(*) as qys,to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm') as ny from dual d ; --where y.id in(select b.zjj_id from b_Laodj_Jtcd b where b.ent_id in (select c.ent_id from c_ygdw c where 1 = 1)) group by to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm'); BEGIN OPEN c_emp; --打开游标1 LOOP --做循环 FETCH c_emp INTO v_wgno; --,v_zgrs,v_qys,v_date; EXIT WHEN c_emp%NOTFOUND; --当没有结果集以后,就结束循环 open c2; LOOP fetch c2 into v_zgrs,v_qys,v_ny; EXIT WHEN c2%NOTFOUND; insert into tj_jtcd(id,zgrs,qys,createdate,wgno,ny) values(tjfx_sequence.nextval,v_zgrs,v_qys,sysdate,v_wgno,v_ny); --插入数据 end loop; close c2; END loop; CLOSE c_emp; commit; end p_test;
4。带参数的存储过程(完整版)。
执行: exec p_test('2009-01-01','2009-10-01');
Java 代码 < pluginspage=http://www.macromedia.com/go/getflashplayer src=http://zhzhiqun2005.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf width=14 height=15 type=application/x-shockwave-flash flashvars="clipboard=CREATE%20OR%20REPLACE%20PROCEDURE%20p_test(stime%20in%20varchar2%2Cetime%20in%20varchar2)%20%20%20--%E5%88%9B%E5%BB%BA%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B%0A%20%20is%20%20%20%0A%20%20%20%20%20--%E4%BB%A5%E4%B8%8B%E5%AE%9A%E4%B9%89%E4%BA%86%E5%9B%9B%E4%B8%AA%E5%8F%98%E9%87%8F%2C%E7%94%B1%E4%BA%8E%E8%BF%99%E4%BA%9B%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC%E5%90%8E%E8%A6%81%E6%8F%92%E5%85%A5%E5%88%B0tj_jtcd%E8%BF%99%E4%B8%AA%E8%A1%A8%E4%B8%AD%E6%89%80%E4%BB%A5%E7%B1%BB%E5%9E%8B%E9%83%BD%E8%A6%81%E5%AE%9A%E4%B9%89%E6%88%90%E4%B8%80%E8%87%B4%0A%20%20v_wgno%20%20%20%20tj_jtcd.wgno%25type%3B%20%20%20%20%20%0A%20%20v_zgrs%20%20%20%20tj_jtcd.zgrs%25type%3B%20%20%20%0A%20%20v_qys%20%20%20%20%20tj_jtcd.qys%25type%3B%20%20%20%0A%20%20v_ny%20%20%20%20%20%20tj_jtcd.ny%25type%3B%20%20%20%0A%20%20%0A%20%20CURSOR%20%20%20c_wgno%20%20%20%20--%E6%B8%B8%E6%A0%871%20%E5%8F%96%E5%BE%97%E6%89%80%E6%9C%89%E7%9A%84%E7%BD%91%E6%A0%BC%E7%BC%96%E5%8F%B7%20%E5%85%B1%E6%9C%8995%E6%9D%A1%20%0A%20%20IS%20%20%20%20%20%20%0A%20%20select%20t.wgno%20from%20p_wginfo%20t%20where%20t.wgtype%20%3D%203%3B%20%20%20%0A%20%20%20%20%20%0A%20%20CURSOR%20c_data(wgid%20varchar2)%20%20--%E6%B8%B8%E6%A0%872%20%20%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E6%B8%B8%E6%A0%87%2C%E8%BF%99%E4%B8%AA%E5%8F%82%E6%95%B0%E6%98%AF%E4%BB%8E%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%BD%91%E6%A0%BC%E4%B8%AD%E5%8F%96%E5%BE%97%2C%E5%B9%B6%E4%B8%94%E4%BD%9C%E4%B8%BA%E8%BF%99%E4%B8%AA%E6%9F%A5%E8%AF%A2%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E6%9D%A1%E4%BB%B6%0A%20%20IS%20%20%20%0A%20%20select%20%0A%20%20nvl(sum(y.zgzs)%2C0)%20as%20zgrs%2C%20nvl(count(*)%2C0)%20as%20qys%2Cto_char(to_date(y.lhrq%2C%20'yyyy-mm-dd')%2C%20'yyyy-mm')%20as%20ny%20%20%20%20%0A%20%20%20from%20y_laodj_jtcd%20y%20%20%20%0A%20%20%20where%20%0A%20%20%20to_date(y.lhrq%2C'yyyy-mm-dd')%20between%20to_date(stime%2C'yyyy-mm-dd')%20and%20to_date(etime%2C'yyyy-mm-dd')%20and%0A%20%20%20y.id%20in(select%20b.zjj_id%20from%20b_Laodj_Jtcd%20b%20where%20b.ent_id%20in%20(select%20c.ent_id%20from%20c_ygdw%20c%20where%201%20%3D%201%20and%20c.wgno%20%3D%20wgid))%20group%20by%20to_char(to_date(y.lhrq%2C%20'yyyy-mm-dd')%2C%20'yyyy-mm')%3B%20%20%20%0A%20%20%0A%20%20%0A%20%20%0A%20%20BEGIN%20%20%20%0A%20%20%0A%20%20OPEN%20%20%20c_wgno%3B%20%20%20%20%20--%E6%89%93%E5%BC%80%E6%B8%B8%E6%A0%871%20%20%0A%20%20LOOP%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%E5%81%9A%E5%BE%AA%E7%8E%AF%20%20%20%0A%20%20FETCH%20%20%20c_wgno%20%20%20INTO%20%20%20v_wgno%3B%20--%E5%AF%B9%E9%81%8D%E5%8E%86%E6%B8%B8%E6%A0%871%E4%B8%AD%E7%9A%84%E5%80%BC%20%20%20%0A%20%20EXIT%20%20%20WHEN%20%20%20c_wgno%25NOTFOUND%3B%20%20%20%20--%E5%BD%93%E6%B2%A1%E6%9C%89%E7%BB%93%E6%9E%9C%E9%9B%86%E4%BB%A5%E5%90%8E%2C%E5%B0%B1%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%20%20%20%0A%20%20%20%20%20%0A%20%20open%20c_data(v_wgno)%3B%20%20%20%20%20%20%20%20%20%20--%E6%89%93%E5%BC%80%E6%B8%B8%E6%A0%87c2%0A%20%20LOOP%0A%20%20fetch%20c_data%20into%20v_zgrs%2Cv_qys%2Cv_ny%3B%20%20%20%20--%E9%81%8D%E5%8E%86%E6%B8%B8%E6%A0%872%E9%87%8C%E7%9A%84%E5%80%BC%0A%20%20EXIT%20%20%20WHEN%20%20%20c_data%25NOTFOUND%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%E4%BB%A5%E4%B8%8B%E6%98%AF%E6%89%A7%E8%A1%8C%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C%2C%E6%8F%92%E5%85%A5%E7%9A%84%E5%80%BC%E6%9D%A5%E8%87%AA%E4%BA%8E%E6%B8%B8%E6%A0%871%2C2%E4%B8%AD%E9%81%8D%E5%8E%86%E7%9A%84%E5%80%BC%0A%20%20insert%20into%20tj_jtcd(id%2Czgrs%2Cqys%2Ccreatedate%2Cwgno%2Cny)%20values(tjfx_sequence.nextval%2Cv_zgrs%2Cv_qys%2Csysdate%2Cv_wgno%2Cv_ny)%3B%20--%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%20%20%20%0A%20%20%20%20%20%0A%20%20end%20loop%3B%20%20%20%20%20%20--%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%2C%E5%B9%B6%E5%85%B3%E9%97%AD%E6%B8%B8%E6%A0%872%0A%20%20close%20c_data%3B%20%20%20%0A%20%20%0A%20%20END%20loop%3B%20%20%20%20%20%20--%E7%BB%93%E6%9D%9F%E5%BE%AA%E7%8E%AF%2C%E5%B9%B6%E5%85%B3%E9%97%AD%E6%B8%B8%E6%A0%871%0A%20%20CLOSE%20%20c_wgno%3B%20%20%20%0A%20%20%0A%20%20commit%3B%20%20%20%20%20%20%20%20--%E4%BA%8B%E5%8A%A1%E5%A4%84%E7%90%86%20%E6%8F%90%E4%BA%A4%20(%E8%BF%99%E9%87%8C%E6%9C%89%E5%BE%85%E5%AE%8C%E5%96%84)%0A%20%20%0A%20end%20p_test%3B%20%20%0A%0A" quality="high" allowscriptaccess="always">
- CREATE OR REPLACE PROCEDURE p_test(stime in varchar2,etime in varchar2) -- 创建带参数的存储过程
- is
- -- 以下定义了四个变量,由于这些变量赋值后要插入到tj_jtcd这个表中所以类型都要定义成一致
- v_wgno tj_jtcd.wgno%type;
- v_zgrs tj_jtcd.zgrs%type;
- v_qys tj_jtcd.qys%type;
- v_ny tj_jtcd.ny%type;
- CURSOR c_wgno -- 游标1 取得所有的网格编号 共有95条
- IS
- select t.wgno from p_wginfo t where t.wgtype = 3;
- CURSOR c_data(wgid varchar2) -- 游标2 这是一个带参数的游标,这个参数是从第一个网格中取得,并且作为这个查 询中的一个条件
- IS
- select
- nvl(sum(y.zgzs),0) as zgrs, nvl(count(*),0) as qys,to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm') as ny
- from y_laodj_jtcd y
- where
- to_date(y.lhrq,'yyyy-mm-dd') between to_date(stime,'yyyy-mm-dd') and to_date(etime,'yyyy-mm-dd') and
- y.id in(select b.zjj_id from b_Laodj_Jtcd b where b.ent_id in (select c.ent_id from c_ygdw c where 1 = 1 and c.wgno = wgid)) group by to_char(to_date(y.lhrq, 'yyyy-mm-dd'), 'yyyy-mm');
- BEGIN
- OPEN c_wgno; -- 打开游标1
- LOOP -- 做循环
- FETCH c_wgno INTO v_wgno; --对遍历游标1中的值
- EXIT WHEN c_wgno%NOTFOUND; -- 当没有结果集以后,就结束循环
- open c_data(v_wgno); -- 打开游标c2
- LOOP
- fetch c_data into v_zgrs,v_qys,v_ny; -- 遍历游标2里的值
- EXIT WHEN c_data%NOTFOUND;
- -- 以下是执行插入操作,插入的值来自于游标1,2中遍历的值
- insert into tj_jtcd(id,zgrs,qys,createdate,wgno,ny) values(tjfx_sequence.nextval,v_zgrs,v_qys,sysdate,v_wgno,v_ny); -- 插入数据
- end loop; -- 结束循环,并关闭游标2
- close c_data;
- END loop; -- 结束循环,并关闭游标1
- CLOSE c_wgno;
- commit; -- 事务处理 提交 (这里有待完善)
- end p_test;
相关阅读 更多 +