大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说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