简化过后是这个存储过程,意思是里面循环执行,在pl/sql里怎么执行这个存储过程呢?
这个存储过程不对的话,该怎么修改呢,先谢过啦,分不多~
CREATE OR REPLACE PROCEDURE p_dwkhb_tj IS
Declare
v_czl number(5,4);
v_counter int := 9;
begin
while v_counter >0 loop
v_counter := v_counter - 1;
select shzh_czl into v_czl from (
select sum0/Sj_sum as shzh_czl
from ( select Sj_sum ,sum0 from table_q);
insert into table_test('1','1');
EXCEPTION WHEN OTHERS THEN
insert into table_test('0','0');
END LOOP;
END;
这个存储过程不对的话,该怎么修改呢,先谢过啦,分不多~
CREATE OR REPLACE PROCEDURE p_dwkhb_tj IS
Declare
v_czl number(5,4);
v_counter int := 9;
begin
while v_counter >0 loop
v_counter := v_counter - 1;
select shzh_czl into v_czl from (
select sum0/Sj_sum as shzh_czl
from ( select Sj_sum ,sum0 from table_q);
insert into table_test('1','1');
EXCEPTION WHEN OTHERS THEN
insert into table_test('0','0');
END LOOP;
END;
解决方案 »
- 【菜鸟提问】刚开始学习ORACLE遇到一个问题
- oracle如何实现sqlserver的COMPUTE子句功能
- 请问登录SQL Plus 时的口令跟登录enterprise manager console(通过oracle management server)时的口令是不是应该是一样的?
- exp/imp, snatshop在oracle online文档的那个地方?
- 在oracle中的存储过程或函数使用事务处理的问题???
- 有个问题请大家帮忙吗?
- oracle密码忘记了,怎么找回来啊?
- 为何我的oracle安装后没有 oem? up也有分
- 为什么创建表空间时老提示无效的文件名或标志过长
- Oracle 求最后一次時間和上一次時間 SQL
- 请问变量为NULL时如何查询
- ORACLE中如何实现自增字段:
或者
begin
p_dwkhb_tj;
end;
来执行存储过程。
如果你的过程编译后报错 你可以通过show errors来看错误。
然后ed进行编辑
p_dwkhb_tj;
end;执行后也报错,似乎不可以哦
show errors没用过,不知道怎么搞~,还望多多指教,。。
那就更好办了 下面就错误信息啊 在procedure里找到你的过程 edit就可以修改了
insert into table_test('0','0');
导致的
在其外面再包层 begin end
Declare
v_czl number(5, 4);
v_counter int := 9;
begin
while v_counter > 0 loop
v_counter := v_counter - 1;
begin
dbms_output.put_line(v_counter);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('0');
end;
end loop;
END;
--改了几个 有些地方有点多余CREATE OR REPLACE PROCEDURE p_dwkhb_tj
IS
v_czl number(5,4);
v_counter int := 9;
begin
while v_counter >0 loop
v_counter := v_counter - 1;
select (sum0/Sj_sum) into v_czl from table_q;
insert into table_test values('1','1');
END LOOP;
EXCEPTION WHEN OTHERS THEN
insert into table_test values('0','0');
commit;
END;--sql窗口
begin
p_dwkhb_tj;
end;
--命令窗口
exec p_dwkhb_tj;
楼主好像是每次loop都要捕捉异常
个人觉得还是包一层
其实,这个存储过程的select语句,循环执行,分别选出一个值,
比如六次就是sum1,sum2...sum6,如果sum0 ~ sum6选出时任意一个异常,就置‘0’,否则记录此值。
然后插入一条记录即insert into TABLE_NAME values('sum1',...'sum6'),
不知该如何修改这段代码呢?
最后一次插入
其实我觉得楼主没必要做6次捕获异常 select不就是会出现查不到数据的异常么
用个 nvl(sum(),0)
是这个意思么
sum0 ~ sum6 是两个数相除的结果,
所以每个值都有可能出现除数为0的情况,即出现异常,
所以每次插入一条记录时,必须考虑每个字段是否有异常~
想了想,还是必须定义六个变量。