CREATE OR REPLACe PROCEDURE delDic(id1 number)
AS
childCount number DEFAULT 0;
parentID number DEFAULT 0;
BEGIN
select parent_id into parentID from sys_dic where dic_id = id1;
if (parentID > 0) then
begin
select count(dic_id) into childCount from sys_dic where parent_id = parentID and dic_status = 'active';
update sys_dic set child_count = childCount where dic_id = parentID;
end;
end if;
commit;
END;
oracle 创建存储过程提示编译错误,错误在哪里?
答案:2 悬赏:0
解决时间 2021-03-08 09:48
- 提问者网友:無奈小影
- 2021-03-08 00:44
最佳答案
- 二级知识专家网友:你好陌生人
- 2021-03-08 01:46
CREATE OR REPLACe PROCEDURE proc_favor_insert(proc_info out VARCHAR2) IS
house_favorID2 VARCHAr2(10)
favor_name2 VARCHAr2(20);
favor_remark2 VARCHAr2(50);
cou number;
BEGIN
SELECT MAX(house_favorID) INTO house_favorID2 from tb_favor;
IF house_favorID2 IS NULL
THEN
house_favorID2:='fav1001';
ELSE
house_favorID2:='fav'+cast(cast(substr(house_favorID2,4,4) as int)+1 as VARCHAr2(20));
---cast(cast(substr(house_favorID2,4,4) as int)+ 是house_favorID2 不是house_favorID
END IF;
SELECt COUNT(*) INTO cou FROM tb_favor WHERe favor_name=favor_name2;
---favor_name2的值呢 你没赋值 怎么来
IF cou>0
proc_info:='isHave';
ELSE
INSERT INTO tb_favor VALUES(house_favorID2,favor_name2,favor_remark2);
proc_info:='OK';
END IF;
END ;
house_favorID2 VARCHAr2(10)
favor_name2 VARCHAr2(20);
favor_remark2 VARCHAr2(50);
cou number;
BEGIN
SELECT MAX(house_favorID) INTO house_favorID2 from tb_favor;
IF house_favorID2 IS NULL
THEN
house_favorID2:='fav1001';
ELSE
house_favorID2:='fav'+cast(cast(substr(house_favorID2,4,4) as int)+1 as VARCHAr2(20));
---cast(cast(substr(house_favorID2,4,4) as int)+ 是house_favorID2 不是house_favorID
END IF;
SELECt COUNT(*) INTO cou FROM tb_favor WHERe favor_name=favor_name2;
---favor_name2的值呢 你没赋值 怎么来
IF cou>0
proc_info:='isHave';
ELSE
INSERT INTO tb_favor VALUES(house_favorID2,favor_name2,favor_remark2);
proc_info:='OK';
END IF;
END ;
全部回答
- 1楼网友:如果这是命
- 2021-03-08 02:43
1. 创建完存储过程(在命令行),可以用showerr看具体错误
2. 可以在plsql中,输入"全班排名", 然后俺右键->编辑,看到具体错误
3. 你的sql从from后一直到group by的分号;是多余的,即便单独在sql窗口也会报错
sql应该改成
select b.学号,a.姓名, avg(a.成绩) 平均分,sum(a.成绩) 总分
from 成绩信息表 a
join 学籍信息表 b on (a.学号=b.学号)
join 班级信息表 c on (c.班级号=b.班级号)
where c.班级名称=class
group by b.学号
order by avg(成绩) ,b.学号 desc;
4. 存储过程不能直接用sql,要用游标或select……into方式
比如:
create or replace procedure 全班排名(
class in char(8)
)
as
cursor cur(p_class char(8)) is
select b.学号,a.姓名, avg(a.成绩) 平均分,sum(a.成绩) 总分
from 成绩信息表 a
join 学籍信息表 b on (a.学号=b.学号)
join 班级信息表 c on (c.班级号=b.班级号)
where c.班级名称=class
group by b.学号
order by avg(成绩) ,b.学号 desc;
rs cur%rowtype;
begin
for rs in cur(class) loop
dbms_output.put_line(rs.学号||','||rs.姓名||','||rs.平均分||','||rs.总分);
end loop;
end;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯