Oracle学习笔记十九:PL/SQL流程控制语句

Oracle学习笔记十九:PL/SQL流程控制语句一、引言 • PL/SQL 程序可通过条件或循环结构来控制命令执行的流程。 • PL/SQL 提供了丰富的流程控制语句,与 Java 一样也有三种控制结构: • 顺序结构 • 选择结构 • 循环结构

Oracle学习笔记十九:PL/SQL流程控制语句

一、引言

• PL/SQL 程序可通过条件或循环结构来控制命令执行的流程。

• PL/SQL 提供了丰富的流程控制语句,与 Java 一样也有三种控制结构:

  • 顺序结构

  • 选择结构

  • 循环结构

二、选择结构

2.1、IF-THEN

1)IF-THEN

该结构先判断一个条件是否为 TRUE,条件成立则执行对应的语句块,与 Java 中的 if 语句很相似。

declare
    newsal emp.sal%type;
begin
    select sal into newsal from emp where ename="James";
    if newsal>=1500 then
        update emp set comm=1000 where ename="James";
    end if;
    commit;
end;

2)IF-THEN-ELSE

declare
    newsal emp.sal%type;
begin
    select sal into newsal from emp where ename="James";
    if newsal>=1500 then
        update emp set comm=1000 where ename="James";
    else
        update emp set comm=100 where ename="James";
    end if;
    commit;
end;

3)IF-THEN-ELSIF

declare
    newsal emp.sal%type;
begin
    select sal into newsal from emp where ename="James";
    if newsal>=1500 then
        update emp set comm=1000 where ename="James";
    elsif newsal>=1000 then
        update emp set comm=800 where ename="James";
    else
        update emp set comm=400 where ename="James";
    end if;
    commit;
end;

2.2、CASE

CASE 是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动作。也可以作为表达式使用,返回一个值。类似 Java 中的 switch 语句:

declare
    v_grade char(1) := upper("&p_grade");
begin
    case v_grade
        when "A" then
            dbms_output.put_line("A");
        when "B" then
            dbms_output.put_line("B");
        when "C" then
            dbms_output.put_line("C");
        else
            dbms_output.put_line("not found char!");
    end case;
end;

三、循环结构

Oracle PL/SQL提供的循环类型有:

  • 无条件循环 LOOP-END LOOP 语句

  • WHILE 循环语句

  • FOR 循环语句

除了以上循环结构外,PL/SQL中还提供了EXIT用于强制退出循环,类似于 Java 中的 break 语句。

3.1、LOOP

LOOP 循环是最简单的循环,也称为无限循环,LOOP 和 END LOOP 是关键字。

declare
    v_sum number(10) :=0;
    i number(10) :=1;
begin
    loop
        v_sum:=v_sum+i;
        i:=i+1;
        if i>100 then
            exit;
        end if;
    end loop;
    dbms_output.put_line(v_sum);
end;

3.2、WHILE

WHILE 循环与 Java 中的 while 循环很类似。先判断条件,条件成立再执行循环体。

declare
    v_sum number(10) :=0;
    i number(10) :=1;
begin
    while i<=100 loop
        v_sum:=v_sum+i;
        i:=i+1;
    end loop;
    dbms_output.put_line(v_sum);
end;

3.3、FOR

FOR 循环需要预先确定的循环次数,可通过给循环变量指定下限和上限来确定循环的次数,然后循环变量在每次循环中递增(或者递减)。

declare
    v_sum number(10) :=0;
    i number(10) :=1;
begin
    for i in 1..100 loop
        v_sum:=v_sum+i;
    end loop;
    dbms_output.put_line(v_sum);
end;

四、动态SQL

• 在 PL/SQL 程序开发中,可以使用 DML 语句和事务控制语句,但是还有很多语句(比如 DDL 语句)不能直接在 PL/SQL 中执行,这些语句可以使用动态 SQL 来实现。

• PL/SQL 块先编译然后执行,动态 SQL 语句在编译时不能确定,只有在程序执行时把 SQL 语句作为字符串的形式由动态 SQL 命令来执行。

• 在编译阶段 SQL 语句作为字符串存在,程序不会对字符串中的内容进行编译,在运行阶段再对字符串中的 SQL 语句进行编译和执行。

语法格式:动态 SQL

  EXECUTE IMMEDIATE 动态语句字符串

  [INTO 变量列表]

  [USING 参数列表]

  • 如果动态语句是 SELECT 语句,可以把查询的结果保存到 INTO 后面的变量中。如果动态语句中存在参数,USING 为语句中的参数传值。

  • 动态 SQL 中的参数格式是:[:参数名],参数在运行时需要使用 USING 传值。

declare
    v_sql varchar2(128);
    v_sal emp.sal%type;
    v_empno emp.empno%type := "1001";
begin
    --执行动态查询
    execute immediate "create table loginuser (id varchar2(10) primary key,name varchar2(20) not null)";
    v_sql:="select sal from emp where empno=""1001""";
    execute immediate v_sql into v_sal;
    dbms_output.put_line(v_sal);
    
    --执行带参查询
    v_sql:="select sal from emp where empno=:1";
    execute immediate v_sql into v_sal using v_empno;
    dbms_output.put_line(v_sal);
end;

 

原文地址:https://www.cnblogs.com/atomy/archive/2022/06/04/16341080.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5160.html

(0)
上一篇 2023-05-20
下一篇 2023-05-20

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注