tnjk.net
当前位置:首页 >> orAClE存储过程中嵌套多个iF >>

orAClE存储过程中嵌套多个iF

BEGIN IF (1 = 1) THEN DBMS_OUTPUT.PUT_LINE('这是第一层的if'); IF (1 = 1) THEN DBMS_OUTPUT.PUT_LINE('这是第二层的if'); END IF; ELSE DBMS_OUTPUT.PUT_LINE('这是第一层的else'); END IF; END; 这个是我测试的 不会被第一个if截断 是不是...

一、 if()then if()then end if; end if; 二、 if()then elsif()then end if;

create or replace procedure p_run_temp as S_DATE:=to_number(to_char(sysdate,'d'),'9');--查询下to_char这个函数是否有问题 begin if S_date=4 then p_temp(); else p_temp2(); end if ; end p_run_temp; 存储过程一般用AS。而且题中的存储...

因为外层运行,内层才会运行,所以v$db_object_cache表中正在执行的存储过程,发现是都有的。 但是语句的执行肯定是顺序的

你的IF 逻辑有问题:当输入37的时候 flag>5 肯定结果是1,不会进入else了。 你可以再第一行加上FLAG5 and FLAG10 THEN V_VALUE :=2; ELSIF FLAG

if( a==1 && b==1) 这样写: if a = 1 and b = 1 then -- 里面写if成立情况的代码 else -- else情况 end if; if(a==1 | | b==1) 这样写: if a = 1 or b = 1 then -- 里面写if成立情况的代码 else -- else情况 end if;

问题1:当你传入37 时,IF FLAG>5 已经满足条件了,直接V_VALUE :=1;,不会继续判断了。然后就调到end if。可以按f9调试,不信一步步看它的执行过程。 问题2:IF V_NULL=NULL,不是这样写,是IF V_NULL IS NULL ,就会输出888啦。

在p1内应该是按你调用的顺序执行的,如果要p1和p2的执行放在一个事物中,子过程中不写commit。可以用一下异常 exception when others then rollback; 一个子过程失败,回滚,另一个子过程也就没起作用

create or replace procedure test_procedure is --a表游标定义 cursor a_cursor is select id from a; --b表游标定义 cursor b_cursor(aid number) is select id from b where b.id = aid;begin for a_cur in a_cursor loop for b_cur in b_cur...

因为你这个存储过程的外层是个包,里面可以包含很多的过程和函数,最外层的begin是包体的定义部分,里层的begin是过程或者函数的定义部分,这是必需的,即使是同一个存储过程为了区分执行块,也可以有多个begin

网站首页 | 网站地图
All rights reserved Powered by www.tnjk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com