今天朋友说他在存储过程中使用到了count函数,可得到的结果是-1,我不太相信,什么时候会出现这个情况
他是这样写的,有兴趣的帮看一下
CREATE OR REPLACE PROCEDURE MEDADM.DAY_ADT2 (STARTDATE DATE, ENDDATE DATE) AS
CURSOR r_cur3 IS
SELECT PATS_IN_HOSPITAL.DEPT_CODE,PAT_VISIT.IDENTITY,
COUNT(PATS_IN_HOSPITAL.PATIENT_ID) in_hospital_num,
SUM(DECODE(PATS_IN_HOSPITAL.PATIENT_CONDITION,'1',1,'2',1,0)) CRITICAL
FROM PAT_VISIT,PATS_IN_HOSPITAL
WHERE (PAT_VISIT.PATIENT_ID = PATS_IN_HOSPITAL.PATIENT_ID ) and
(PAT_VISIT.VISIT_ID = PATS_IN_HOSPITAL.VISIT_ID )
GROUP BY PATS_IN_HOSPITAL.DEPT_CODE,
PAT_VISIT.IDENTITY;row_rec3 r_cur3%ROWTYPE; OPEN r_cur3;
LOOP
FETCH r_cur3 INTO row_rec3;
EXIT WHEN r_cur3%NOTFOUND OR r_cur3%NOTFOUND IS NULL;
IF row_rec3.dept_code IS NOT NULL THEN
IF row_rec3.identity IS NULL THEN
row_rec3.identity:='其他';
END IF;
UPDATE DEPT_ADT_DAY SET
bed_used_num=row_rec3.in_hospital_num WHERE (DEPT_ADT_DAY.st_date=startdate) and
(DEPT_ADT_DAY.dept_code = row_rec3.dept_code) AND
(DEPT_ADT_DAY.identity = row_rec3.identity);
IF SQL%NOTFOUND OR SQL%NOTFOUND IS NULL THEN
INSERT INTO DEPT_ADT_DAY (st_date,
dept_code,
identity,
adm_outp_num,
from_other_dept_num,
from_other_hospital_num,
discharge_normal_num,
trans_dept_num,
trans_hospital_num,
died_num,
bed_used_num)
VALUES (startdate,
row_rec3.dept_code,
row_rec3.identity,0,0,0,0,0,0,0,
row_rec3.in_hospital_num);
END IF;
UPDATE DEPT_LOAD_DAY SET
critical_num=critical_num+row_rec3.critical
WHERE (DEPT_LOAD_DAY.st_date=startdate) and
(DEPT_LOAD_DAY.dept_code = row_rec3.dept_code);
IF SQL%NOTFOUND OR SQL%NOTFOUND IS NULL THEN
INSERT INTO DEPT_LOAD_DAY (st_date,
dept_code,
critical_num)
VALUES (startdate,
row_rec3.dept_code,
row_rec3.critical);
END IF;
END IF;
END LOOP;
CLOSE r_cur3;不胜感激
他是这样写的,有兴趣的帮看一下
CREATE OR REPLACE PROCEDURE MEDADM.DAY_ADT2 (STARTDATE DATE, ENDDATE DATE) AS
CURSOR r_cur3 IS
SELECT PATS_IN_HOSPITAL.DEPT_CODE,PAT_VISIT.IDENTITY,
COUNT(PATS_IN_HOSPITAL.PATIENT_ID) in_hospital_num,
SUM(DECODE(PATS_IN_HOSPITAL.PATIENT_CONDITION,'1',1,'2',1,0)) CRITICAL
FROM PAT_VISIT,PATS_IN_HOSPITAL
WHERE (PAT_VISIT.PATIENT_ID = PATS_IN_HOSPITAL.PATIENT_ID ) and
(PAT_VISIT.VISIT_ID = PATS_IN_HOSPITAL.VISIT_ID )
GROUP BY PATS_IN_HOSPITAL.DEPT_CODE,
PAT_VISIT.IDENTITY;row_rec3 r_cur3%ROWTYPE; OPEN r_cur3;
LOOP
FETCH r_cur3 INTO row_rec3;
EXIT WHEN r_cur3%NOTFOUND OR r_cur3%NOTFOUND IS NULL;
IF row_rec3.dept_code IS NOT NULL THEN
IF row_rec3.identity IS NULL THEN
row_rec3.identity:='其他';
END IF;
UPDATE DEPT_ADT_DAY SET
bed_used_num=row_rec3.in_hospital_num WHERE (DEPT_ADT_DAY.st_date=startdate) and
(DEPT_ADT_DAY.dept_code = row_rec3.dept_code) AND
(DEPT_ADT_DAY.identity = row_rec3.identity);
IF SQL%NOTFOUND OR SQL%NOTFOUND IS NULL THEN
INSERT INTO DEPT_ADT_DAY (st_date,
dept_code,
identity,
adm_outp_num,
from_other_dept_num,
from_other_hospital_num,
discharge_normal_num,
trans_dept_num,
trans_hospital_num,
died_num,
bed_used_num)
VALUES (startdate,
row_rec3.dept_code,
row_rec3.identity,0,0,0,0,0,0,0,
row_rec3.in_hospital_num);
END IF;
UPDATE DEPT_LOAD_DAY SET
critical_num=critical_num+row_rec3.critical
WHERE (DEPT_LOAD_DAY.st_date=startdate) and
(DEPT_LOAD_DAY.dept_code = row_rec3.dept_code);
IF SQL%NOTFOUND OR SQL%NOTFOUND IS NULL THEN
INSERT INTO DEPT_LOAD_DAY (st_date,
dept_code,
critical_num)
VALUES (startdate,
row_rec3.dept_code,
row_rec3.critical);
END IF;
END IF;
END LOOP;
CLOSE r_cur3;不胜感激
解决方案 »
- HP unix系统装了oracle10G,报错版本的8.1.7
- 求大神……
- 如何将 xls 格式的数据导入到 Oracle 中?
- PL SQL存储过程中是否不能只包含一个查询语句?
- 数据库导出报错问题……100分求解
- oracle时间问题
- 请教一个存储过程的写法!!!
- 想学Oracle,请大家推荐一本入门的电子书,最好从图形界面进入的,谢谢!
- 请问:在用户自定义函数中能否返回多记录结果(或数据集)?如何返回记录结果?如何使用返回的记录?谢谢!
- pro*c/c++如何连接一个远程的数据库呢?真是不明白,难道只能在本地数据库中运行pro*c/c++程序?查了很多地方,还是不太明白。那位大虾知
- 关于oracle过程返回值
- 有个表无法删除,请帮忙
你可以把这个row_rec3.in_hospital_num这个值打出来先看看...
COUNT(PATS_IN_HOSPITAL.PATIENT_ID) in_hospital_num, 这里中间要个into吧! 我也这两天刚学存储过程! 不过我觉得应该要有个into