欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Oracle数据库应用教程 » 正文

表达式、绑定变量与流程控件

创建时间:2012年04月03日 23:41  阅读次数:(4784)
分享到:

表达式


PL/SQL 语言常见的表达式分为:1,算术表达式.2,字符表达式.3,关系表达式.4,逻辑表达式

1,算术表达式
   算术表达式是由数值型常量、变量、函数和算术运算符组成的。算术表达式的计算结果是数值型数据,它使用的运算符主要包括:()、??、?、/、+、-等,运算的优先次序为括号→乘方→乘除→加减。 

2,字符表达式
字符表达式是由字符或字符串型常量、变量、函数和字符运算符组成,字符表达式的计算结果仍然是字符型。唯一的字符运算符是并置(‖),这个运算符将两个或者多个字符串连接在一起。

如果并置运算中的所有操作数是 CHAR 类型,那么表达式的结果也为 CHAR 类型。如果所有操作数都为 VARCHAR2 类型,那么表达式的结果就为 VARCHAR2 类型。

例如:’PL’‖’/SQL’的结果为’PL/SQL’。 

3,关系表达式
由字符表达式或者算术表达式与关系运算符组成的。
格式:<表达式 > <关系运算符 > <表达式 > 
关系运算符两边表达式的数据类型必须一致,只有相同类型的数据才能比较。
关系表达式的运算结果为逻辑值,若关系表达式成立,结果为真(TRUE),否则为假(FALSE)。 
关系运算符主要有如下六种: <、  >、=、<=、 >=、!=。 谓词操作符 LIKE、BETWEEN 和 IN,也可以作为关系运算符。

4,逻辑表达式
逻辑表达式是由关系表达式和逻辑运算符组成。逻辑表达式的运算结果为逻辑值。逻辑运算符包括:NOT、OR、AND。逻辑运算符的运算优先次序为 NOT → AND → OR。逻辑表达式的一般格式为: 
<关系表达式 > <逻辑运算符 > <关系表达式 > 
关系表达式和逻辑表达式实际上都是布尔表达式,其值为布尔值(TRUE,FALSE 或者NULL)。

绑定变量


绑定变量也称为主机变量。这些变量在SQL*PLUS环境中声明,匿名块不带任何参数。
好处:
1,绑定变量可以作为参数传递给过程和参数。
2,能够重复利用执行计划。

声明绑定变量的语法是:
VARIABLE variablename datatype
例:SQL > variable gno number

Sql*plus 中使用绑定变量
sql > variable emp_no number;
sql > exec :emp_no := 7900;

PL/SQL 过程已成功完成。
sql > SELECT  ename,sal,deptno from emp WHERE empno =:emp_no;

使用局部变量v_num和绑定变量g_num
绑定变量g_num在SQL*PLUS中用VARIABLE语句来声明。程序块用冒号前缀(:)引用。局部变量不需使用冒号前缀。
SQL > variable g_num number
SQL > declare 
  2    v_num number;
  3  begin
  4    v_num:=3;
  5    :g_num:=v_num * 2;
  6  end;
  7  /

SQL > print g_num

PL/SQL中的替换变量
PL/SQL没有输入能力。通过“&”加标识符即为替换变量,通过替换变量可以在PL/SQL中进行输入,并可以方便地达到创建通用脚本的目的。
SQL > variable g_num number
SQL > declare 
       v_num number;
      begin
        v_num:=&p_num;
        :g_num:=v_num * 2;
      end;
      /

例:创建通用脚本,Employees表中插入数据。
SQL >insert into emp(empno,ename,sal,deptno) values (&empno ,&ename,&sal,&deptno);

SQL > /
输入 empno 的值:  7811
输入 ename 的值:  'jamw'
输入 sal 的值:  3000
输入 deptno 的值:  30
已创建 1 行。

控制结构


PL/SQL 支持的流程控制结构:
1,条件控制
IF 语句
CASE 语句
2,循环控制
LOOP 循环
WHILE 循环
FOR 循环
3,顺序控制
GOTO 语句
NULL 语句

条件控制
IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
示例:
DECLARE
   v_job VARCHAR2(10);
   v_sal number(6,2);
BEGIN
   SELECT job,sal INTO v_job,v_sal FROM emp WHERE
 empno=&&no;
   IF v_job = ‘CLERK’ THEN
      UPDATE emp SET sal=v_sal+200 WHERE empno=&&no;
   ELSIF v_job= ‘SALESMAN’ THEN
      UPDATE emp SET sal=v_sal+100 WHERE empno=&&no;
   ELSE
      UPDATE emp SET sal=v_sal+500 WHERE empno=&&no;
   END IF;
END;

CASE 语句用于根据单个变量或表达式与多个值进行比较,执行 CASE 语句前,先计算选择器的值
示例:
BEGIN
    CASE ‘&grade’
      WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’);
      WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);
      WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);
      WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’);
      WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’);
      ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);
    END CASE;
END;

循环控制
循环控制用于重复执行一系列语句,循环控制语句包括:
LOOP、EXIT 和 EXIT WHEN

循环控制的三种类型:
LOOP   -   基本循环,无条件循环
示例:
LOOP 
  sequence_of_statements
END LOOP;

WHILE  -  根据条件循环
示例:
WHILE condition LOOP 
  sequence_of_statements
END LOOP;

FOR  -  循环固定的次数
示例:
FOR counter IN [REVERSE] value1..value2
LOOP 
  sequence_of_statements
END LOOP;

基本循环
例 使用基本循环。该例程当X值为1010时退出循环。
SQL >  DECLARE
  X  INT :=100;
  Y  INT;
BEGIN
   LOOP
     X:=X+10; 
     EXIT WHEN X >1000;
   END LOOP;
   Y:=X;
END;
/

WHILE循环
例  使用WHILE循环。该例程当X值为1010时退出循环。
SQL > declare 
 x number:=100;
 y number:=0;
 begin 
     while x<=1000 
     loop
        x:=x+10;
     end loop;
     y:=x;
 end;
/

FOR循环
例 使用FOR循环。X累计加10,循环10次后退出。
SQL > DECLARE
x number:=100;
y number:=0; 
begin
FOR v_counter in 1..10 loop 
x:=x+10; 
END LOOP; 
y:=x; 
end;


练习:不同条件修改员工信息,使用顺序控制结构
例6.10 使用GOTO语句。该例程当员工薪水小于800时转到update标签处修改员工薪水提高100。否则转quit标签什么也不做
SQL >declare 
  salary emp.sal%type; 
begin   
select sal into salary from emp where empno=7369; 
  if salary < 800 then      
goto update;  
 else    
  goto quit;   
end if;   
<<update > >  
 update emp set sal=salary + 100 where empno=7369;   
<<quit > >   
NULL; 
end;
/

本示例适用于教学大纲,电子档下载地址:
Oracle学习情境4:统计分析与报表
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 16+48=? 的结果(结果是:64)
结  果: