oracle 存储过程里的if else
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 存储过程里的if else相关的知识,希望对你有一定的参考价值。
我这里想用if else,如果S_date=4;跑p_temp这个过程,如果S_date不等于4就跑p_temp2这个过程,应该怎么写,不需要输出输入。谢谢
create or replace procedure p_run_temp is
S_DATE=to_number(to_char(sysdate,'4');
if S_date=4;
begin
p_temp();
end ;
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。而且题中的存储过程语法也有问题。本回答被提问者和网友采纳 参考技术B if S_date = 4 then
p_temp();
elsif S_date != 4 then
p_temp2();
end if; 参考技术C if S_date=4 then
p_temp();
else
p_temp2();
end if;
关于Oracle if elsif else
昨天被一同事问一问题,问题就是Oracle存储过程中的IF逻辑块
告诉他大概是这样:
create or replace procedure testIfElsif (numb number) IS begin if numb = 1 then DBMS_OUTPUT.put_line(1); else if numb = 2 then DBMS_OUTPUT.put_line(2); else DBMS_OUTPUT.put_line(3); end if; end;
结果死活编译不过去,就又叫我帮他看,
编译报错:
PROCEDURE WAZTJD.TESTIFELSIF 编译错误
错误:PLS-00103: 出现符号 "TESTIFELSIF"在需要下列之一时:
if
行:11
文本:END testifelsif;
修改过程:
一、将else if 去掉就能够编译通过且可以运行调用,说明是else if的问题
二、将else if 改为elseif 结果字体颜色不变色,说明不是关键字,编译不通过
三、将代码最后改为如下
create or replace procedure testIfElsif (numb number) IS begin if numb = 1 then DBMS_OUTPUT.put_line(1); else if numb = 2 then DBMS_OUTPUT.put_line(2); else DBMS_OUTPUT.put_line(3); end if; end if; end;
编译通过;
四、最后感觉还是有问题就在网上搜,终于真相大白是elsif,不是else if 也不是 elseif,更不是第三步的解决方法
最终代码:
CREATE OR REPLACE PROCEDURE testifelsif(numb in number) AS BEGIN if numb = ‘1‘ then DBMS_OUTPUT.put_line(‘1‘); elsif numb = ‘2‘ then DBMS_OUTPUT.put_line(‘2‘); else DBMS_OUTPUT.put_line(‘3‘); end if; END testifelsif;
这是个坑,浪费时间、精力,希望在坑里的同学能够赶紧爬出来!
另:
在写博过程中,有一段测试代码是在博客中写的,粘到pl/sql中没能编译通过,
最终原因是因为博客中的空格默认为圆角空格导致的编译不通过,在pl/sql中将空格删除全部重新打出即可编译通过。
以上是关于oracle 存储过程里的if else的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 存储过程 在循环裏面,怎麽写2个IF语句?不是IF...ELSE IF 哦 因为2个代码块都要判断