各位,有谁知道在没有定义编号的情况下,就是字段中没有可以用来关联顺序的情况下,怎么按照记录的写入顺序,再把记录按此顺序读出来?我试着用ROWID,不过效果不好。急用,谢谢~~~~
这样吧,我用的存储过程实现的代码,具体贴出来,现在问题是select * from tabname 查出来的顺序的确不是我的写入顺序
这个计算过程是:
CREATE OR REPLACE PROCEDURE "P_COUNTRYSIDE_SAND_GROWTH" /*
日期 : 2004-11-04
作者 : 肖云
概要 : m_countryside_sand_growth表的计算,数据依据为shahua表
参数说明 : VillageCode 乡代码
返回值说明 :
主要修改 :优化处理,减少游标使用量
版本1。利用调用函数
日期 : 2004-11-16
作者 : 肖云
概要 :
*/
(VillageCode in number) is
CURSOR cur_get_data (s10_data number,s19_data number) IS SELECT NVL(SUM(s7),0) FROM m_shahua
WHERE s5= VillageCode AND s10 = s10_data AND s19 = s19_data;
TYPE cursor_update_type IS REF CURSOR ;
--用于判断m_countryside_sand_growth表中有无数据
cur_update_flag cursor_update_type;
--用于对m_countryside_sand_growth进行数据更新
cur_update_data cursor_update_type;
--存放求合后的数据
rec_sun_data m_countryside_sand_growth%ROWTYPE;
rec_sun_temp m_countryside_sand_growth%ROWTYPE;
rec_flag shahua%ROWTYPE;
Index_j INTEGER;
--治理措施
FatherMethod VARCHAR2(30);
begin
--填入数据
--如果数据表里没有该乡数据则设置函数返回值
OPEN cur_update_flag FOR SELECT s7 FROM m_shahua WHERE s5= VillageCode ;
FETCH cur_update_flag INTO rec_flag.s7;
IF cur_update_flag%NOTFOUND OR cur_update_flag%NOTFOUND IS NULL then
--设置函数返回值
--if return_values = '0' then
-- return_values :=VillageCode || ';' ;
--else
-- return_values :=return_values || VillageCode || ';';
--end if;
--填入数据日志
INSERT INTO sys_log (sid,sname,sexplain,sdate,sdept,sbt,stype)VALUES(VillageCode,(SELECT sname FROM c_countryside WHERE sid = VillageCode),'无该乡数据!',sysdate,4,VillageCode,6) ;
ELSE
--删除乡统计表中原有记录
DELETE FROM m_countryside_sand_growth WHERE ccode= VillageCode;
--开始计算
FOR Index_j IN 1 .. 18
LOOP
IF Index_j = 1 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,804,804,VillageCode);
ELSIF Index_j = 2 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,803,803,VillageCode);
ELSIF Index_j = 3 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,829,829,VillageCode);
ELSIF Index_j = 4 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,1200,1200,VillageCode);
ELSIF Index_j = 5 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,'805,806',3001,VillageCode);
ELSIF Index_j = 6 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,801,801,VillageCode);
ELSIF Index_j = 7 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,516,516,VillageCode);
ELSIF Index_j = 8 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,311,311,VillageCode);
ELSIF Index_j = 9 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,310,310,VillageCode);
ELSIF Index_j = 10 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,518,518,VillageCode);
ELSIF Index_j = 11 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,809,809,VillageCode);
ELSIF Index_j = 12 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,524,524,VillageCode);
ELSIF Index_j = 13 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,80,80,VillageCode);
ELSIF Index_j = 14 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,802,802,VillageCode);
ELSIF Index_j = 15 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,807,807,VillageCode);
ELSIF Index_j = 16 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,'852,1157,1162,1029',3002,VillageCode);
ELSIF Index_j = 17 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,29',3003,VillageCode);
ELSIF Index_j = 18 THEN
P_SUM_GROWTH_CURSOR(rec_sun_data,'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,29,
852,1157,1162,1029,807,802,80,524,809,518,310,311,516,801,805,806,1200,829,803,804',3004,VillageCode,1);
END IF ;
INSERT INTO M_countryside_sand_growth VALUES (rec_sun_data.sid,rec_sun_data.acode,rec_sun_data.bcode
,rec_sun_data.ccode,rec_sun_data.s01,rec_sun_data.s02,rec_sun_data.s03,rec_sun_data.s04,rec_sun_data.s05
,rec_sun_data.s06,rec_sun_data.s07,rec_sun_data.s08,rec_sun_data.s09,rec_sun_data.s10,rec_sun_data.s11
,rec_sun_data.s12,rec_sun_data.s13,rec_sun_data.s14,rec_sun_data.s15,rec_sun_data.s16,rec_sun_data.s17
,rec_sun_data.s18,rec_sun_data.objectid);
END LOOP;
END IF ;
CLOSE cur_update_flag ;
COMMIT;
EXCEPTION
WHEN VALUE_ERROR
THEN
INSERT INTO sys_log (sid,sname,sexplain,sdate,sdept,sbt,stype)VALUES(VillageCode,(SELECT sname FROM c_countryside WHERE sid = VillageCode),'数据统计错误,可能统计值超出精度!',sysdate,4,VillageCode,6) ;
COMMIT;
END p_countryside_sand_growth;