Oracle 学习笔记第八天

Oracle 学习笔记第八天

PL/SQL的组成

  1. 变量和类型
  2. 控制语句
  3. 子程序和函数
  4. 对象类型和方法

PL/SQL的体系结构

  1. 将PL/SQL块发送给Oracle服务器
  2. Oracle服务器将PL/SQL代码分配给PL/SQL处理,将SQL代码分配给SQL语句执行器处理

PL/SQL块

PL/SQL块是构成PL/SQL程序的基本单元

将逻辑上相关的声明和语句组合在一起

PL/SQL分为三个部分,声明部分、可执行部分、异常处理部分

[DECLARE 						-- 声明部分
         declarations]
 BEGIN							-- 执行部分
         executable statements
 [EXCEPTION 					-- 异常处理部分
         handlers]
END;
/ 			-- 执行缓冲区的块

注意: / :执行缓冲区的块,/ 必须位与行的第一个字符,前面不允许有空格。当PL/SQL块中没有这个 / 时,块里面的内容不会执行,但是可以在执行块之后加上 / 使得块里面的内容得以执行。

PL/SQL默认是关闭输出的,就是如果需要通过执行块的内容来查看某些数据,PL/SQL是默认不输出的,需要打开输出后才能看到。
命令:set serveroutput on; – 打开PL/SQL的输出

PL_SQL块结构

注意:这里不再是选择SQL窗口,而是选择命令窗口;在编辑器里编辑好PL/SQL语句,然后执行,执行结果就会显示在对话框中。

  1. 变量和常量的声明

    语法:variable_name  [CONSTANT]  data_type[(size)] [:=init_value];
    		变量名		  [是否为常量]   	变量类型		:=  值	
    

    Oracle中 := 代表赋值,判断相等只用一个 = 就行了

    ​ 直接给变量赋值使用 :=

    ​ 想通过查询结果赋值给变量: 在查询语句中 select 字段 into 变量名 from…

    举例:
    DECLARE
    	v_name   VARCHAR2(20) :=‘张三’;     	  -- 姓名
    	v_sal NUMBER DEFAULT 8000;    			-- 月收入
    	c_rate   CONSTANT  NUMBER(4,3):=0.023;  -- 年利率
    	v_income  NUMBER(10,3);					-- 一年利息收入
    BEGIN
    ......
    

    PL_SQL定义变量

    注意:使用查询结果赋值时查询出来的结果只能是一个,如果为多个时就会报错。

    变量的数据类型:

    1. 标量类型:

      数字、字符、布尔型、日期时间

    2. LOB类型:大对象类型

      BFILE:字符大对象,可以用来保存小说等多字符文件

      BLOB:二进制大对象,可以用来保存视频、音频等二进制文件

      CLOB:

      NCLOB:

    3. 属性类型

      %TYPE:获取指定表的字段的类型或者指定变量的类型

      %ROWTYPE:获取指定表的记录数据类型

      -- %type 类型
      set serveroutput on;
      declare
         v_name students.sname%type; --取students表的sname列的数据类型
         v_sex students.ssex%type;
         v_age students.sage%type;
         v_birthday students.sbirthday%type;
      begin
         SELECT s.sname,s.ssex,s.sage,s.sbirthday
         INTO   v_name,v_sex,v_age,v_birthday
         FROM students s
         WHERE s.sno = 109;
         
         dbms_output.put_line('学生姓名:'||v_name||
                              '性别:'||v_sex||
                              '年龄:'||v_age||
                              '生日:'||v_birthday);
      end;
      /
      

      type类型

      -- %rowtype 类型
      set serveroutput on;
      declare
         v_students students%ROWTYPE; --取 students 表的记录类型,变量的结构和表的结构一致
      begin
         SELECT *
         INTO   v_students
         FROM students s
         WHERE s.sno = 109;
         
         dbms_output.put_line('学生姓名:'||v_students.sname||
                              '性别:'||v_students.ssex||
                              '年龄:'||v_students.sage||
                              '生日:'||v_students.sbirthday);
      end;
      /
      

      rowtype类型

替代变量

每次我们查询的时候学号都是确定的,很多时候我们查询不能每次查一个就修改一次代码,这是我们可以使用替代变量进行查询。

语法: &abc
-- abc表示提示信息,即当你运行程序时,就会显示一条内容为abc的提示信息

修改上面程序进行测试:

-- %rowtype 类型
set serveroutput on;
declare
   v_students students%ROWTYPE; --取 students 表的记录类型,变量的结构和表的结构一致
begin
   SELECT *
   INTO   v_students
   FROM students s
   WHERE s.sno = &学号;
   
   dbms_output.put_line('学生姓名:'||v_students.sname||
                        '性别:'||v_students.ssex||
                        '年龄:'||v_students.sage||
                        '生日:'||v_students.sbirthday);
end;
/

替代变量

控制结构

  1. 条件控制

    1. if 控制
      语法:
      IF <布尔表达式>  THEN
      	PL/SQL和SQL语句
      ELSIF  <布尔表达式>    THEN
      	其他语句
      ELSE
      	其他语句
      END  IF;
      

      if 判断和我们之前学的编码里面的 if 是一个概念,唯一的区别就是 else if,Oracle中else if 的是 elsif ,还有就是Oracle if 语句判断完后还有一句 END IF。

    2. case 控制
      语法:
      CASE  条件表达式
           WHEN 结果1      THEN
      	  语句段1
           WHEN  结果2   THEN
      	    语句段2
           ELSE 
      		语句段
      END CASE ;
      

      这玩意类似编程中的switch case ,只是这边的when中条件是你选的,可以写不同的判断,但是这个case when 只要执行完一条就不会执行其他判断了,这点和switch类似,同时还要注意做后的 end case;

  2. 循环控制

    1. LOOP 循环
      语法
      LOOP
      	要执行的语句;
      EXIT WHEN <条件语句>;
      END LOOP;
      

      这个也没啥好说的,和编程的也有点像,只是要注意跳出循环的 exit when 语句,这个不能少,不然就无限循环了,当然还要注意最后的 end loop。

    2. while循环
      语法:
      WHILE <布尔表达式> LOOP
      	要执行的语句;
      END LOOP;
      

      这个结构都和编程相似,不多解释。

    3. for循环
      语法:
      FOR 循环计数器  IN [REVERSE]  下限上限   LOOP
      	要执行的语句;
      END LOOP;
      

      循环计数器就是定义的循环变量,后面的下限上限就是循环的取值范围,

      这里的可选值 REVERSE ,如果加上这个值表示从上限到下限循环递减,如果不加则表示从下限到上限的循环递增。

  3. 顺序控制

    1. null 语句
    2. GOTO语句

    这两个几乎不用,而且有坑,所以就不做介绍了。

猜你喜欢

转载自blog.csdn.net/xxydzyr/article/details/85145837
今日推荐