关于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中将空格删除全部重新打出即可编译通过。

时间: 2024-08-09 06:22:15

关于Oracle if elsif else的相关文章

mysql 、oracle存储过程语法区别

1.  条件语句:mysql使用elseif关键字,oracle是elsif关键字: oracle: if表达式 then 表达式: elsif 表达式: endif: mysql: if表达式then 表达式: elseif 表达式: endif: 2. 字符串连接 oracle使用 || : mysql 使用concat函数: 3. 日期计算(年月日数) mysql: 函数TimeStampDiff()是MySQL本身提供的可以计算两个时间间隔的函数,语法为:TIMESTAMPDIFF(un

Oracle:控制语句 IF..ELSIF语句、CASE语句、FOR循环语句

--多重if语句(注意点:BEGIN END ,IF 条件 THEN,ELSIF 条件 THEN,ELSE... END IF)BEGIN IF FALSE THEN DBMS_OUTPUT.put_line('执行if语句...'); ELSIF TRUE THEN DBMS_OUTPUT.put_line('执行ELEIF1语句...'); ELSIF TRUE THEN DBMS_OUTPUT.put_line('执行ELEIF2语句...'); ELSIF FALSE THEN DBMS

Oracle中的if...then...elsif

if...then...elsif实现多分支判断语句 其语法如下: if <condition_expression1> then plsql_sentence_1; elseif<condition_expression2> then plsql_sentence_2; ... else plsql_sentence_n; end if; 最后一个else后边是没有条件的,这个比较重要. 具体示例: declare v_month int:=2; begin if v_month

oracle 数据库 if...elsif...语句

CREATE OR REPLACE FUNCTION "UFN_GETIDS" (    OPEKIND   IN   VARCHAR2,-- 查询类型    PARAMS IN VARCHAR2-- 查询字段 ) RETURN clob IS    str_return  clob;--varchar2(30000); BEGIN      if      OPEKIND = '1'   then        declare              Cursor cusor1 i

Oracle条件判断if...elsif

原文地址:https://www.cnblogs.com/niwotaxuexiba/p/10353964.html

Oracle基础语法

=========================Oracle数据库简单语句============ --%TYPE类型 --SQL> declare var_name varchar2(100);--ZM_TREE.Fname%type; var_type varchar2(100);--ZM_TREE.Flinktype%type; begin SELECT t.fname,t.flinktype into var_name,var_type from zm_tree t where fli

Oracle数据库——触发器的创建与应用

一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作.(第1题中,user是系统函数,返回当前用户.字符串中使用两个单引号表示一个单引号.) 要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果. (1)在scott用户下创建触发器 语句: create or replace t

oracle(sql)基础篇系列(五)&mdash;&mdash;PLSQL、游标、存储过程、触发器

  PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是为了补充SQL语言的,是带有了分支和循环的语言. PL/SQL 语法 基本数据类型声明 declare v_name varchar2(20); v_temp number(1); v_count binary_integer := 0; v_sal number(7,2) := 4000.00

Oracle系列:(29)存储过程和存储函数

1.存储过程[procedure] 什么是存储过程? 事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类似于Java中的函数. 为什么要用存储过程? (1)PLSQL每次执行都要整体运行一遍,才有结果 (2)PLSQL不能将其封装起来,长期保存在oracle服务器中 (3)PLSQL不能被其它应用程序调用,例如:Java 存储过程与PLSQL是什么关系? 存储过程是PLSQL的一个方面的应用