Oracle基础(十二)可编程SQL

匿名 (未验证) 提交于 2019-12-02 23:57:01

可编程SQL(Oracle)

PL/SQL : PL/SQL是 Oracle 是在标准SQL语句上的过程性扩展.pl/SQL 不仅允许嵌入SQL语句,还可以定义变量和常量.允许使用条件语句和循环语句,异常处理

PL/SQL 优势:

1.支持面向对象编程,支持自定义类型,实例化,继承,程序块中的重载

2.更好的提升程序性能,PL/SQL把一个Pl/SQL语句块统一进行编译后执行,同时还可以把
编译好的SQL块存储到Oracle的服务器上面,可以重复调用,而SQL妃过程语句,只能一条一条执行.PL/SQL的执行快速高效

3.良好的移植性 : 使用PL/SQL编写应用程序,可以移植到任何操作系统上面,同时可以编写程序库,在不同的环境中重用.

4.安全性 : 可以使用权限控制是否可以访问存储过程.

需要掌握

1.掌握PL/SQL程序结构
2.掌握流程空指针语法
3.掌握复合变量的语法
4.掌握游标的用法
5.会使用异常

过程/函数/无名块,他们之间可以互相嵌套
1.当定义的变量的时候,建议使用 v_ 作为前缀,v_sal,v_job…
2.当定义常量的时候,建议使用 c_ 作为前缀
3.定义游标的时候,通常使用 _cursor作为后缀, dept_cursor
4.定义异常的时候,使用 e_ 作为前缀

PL/SQL程序块

PL/SQL 分为两种 : 无名块,命名块 : 函数,过程,包,触发器…
PL/SQL 有3部分组成:定义部分,执行部分,异常处理部分
定义部分:定义变量,常量,游标,异常,复合数据等类型
执行部分 : 实现用用模块的一些功能,dml,输出语句,判断…
异常部分 : 处理异常的代码,当程序出现异常的时候执行.

	[DECLARE 				... -- 定义部分 			] 			begin 				.. -- 执行部分 				[ EXCEPTION 					... -- 异常处理部分 				] 			end; 		DECLARE,begin,EXCEPTION 后面都没有分号,而end后则必须要带分号; 		 		DECLARE 		  -- 定义 		  num NUMBER; -- 定义变量 		BEGIN 		  num := 6+6; -- 为变量赋值 		  dbms_Output.put_line('6 + 6 = '||num);--输出变量 		 		EXCEPTION -- 异常处理 		 	when OTHERS THEN 		    Dbms_Output.put_line('出现异常了!'); 		 		END;

变量和类型

pl/sql数据类型有标量类型,复合类型,参照数据类型,lob数据类型

  1. 标量只能存放单个数值,最常用的变量都是标量.
    1.变量名以字母开头,不区分大小写
    2.变量名由字母,数字,$,_组成
    3.变量长度最多30个字符
    4.变量名中不能有空格
    5.不能使用关键字

    variable_name [constant] data_type not null [default | := value]

    variable_name : 变量名
    constant : 是否是常量
    data_type : 数据类型(char,number,date,varchar2)
    not null : 表示该变量非空,必须指定默认值
    default 或 := value : 给变量赋值默认值

     declare     c_id constant integer := 66;   v_gender char(1);    v_num number(5,2) default 66.6;    v_date date;    isfindshed boolean default true;  begin    end;

pl/sql运算符

=	等于(逻辑判断) <>,!=,~=,^= 不等于 :=  赋值运算符 => 关系号 ..  范围运算符 || 字符串连接

注释

-- 单行注释  /* 	多行注释 	*/   declare  /* c_id constant integer := 66;  v_gender char(1);   v_num number(5,2) default 66.6;   v_date date;   isfindshed boolean default true;  */    v_sal number;    begin      select sal into v_sal from emp where empno = 7788;   dbms_output.put_line(v_sal);  end;

if分支语句

condition1,condition2 只能是boolean表达式
statements1,statements2,statements3 是pl/sql语句,如果condition1为true,执行statements1…

if condition1 then    statements1 elsif condition2 then      statements2 else      statements3       end if;

if语句基本选择结构,每一个if语句都有then,以if开头的语句不能跟结束符合,每一个if语句以 end if结束.每一个if只能有1个else

declare   n1 number := 100;   n2 number := 50;      begin     --查询部门20人数和30人数哪一个部门人数多,输出 : 20 部门多少人 大于 30部门 多少人.30     -- 查询 20  30 部门的人数,进行          select count(1) into n1 from emp where deptno = 20;     select count(1) into n2 from emp where deptno = 30;           if n1 > n2 then        dbms_output.put_line('n1 大于 n2!');      else        dbms_output.put_line('n1 小于 n2!');      end if;      end;

循环

基本循环,while循环,for循环

  1. 基本循环
    loop
    statements

     exit [when condition]  end loop;  至少会被执行一次.

    2.while 循环
    while condition loop

     end loop;   	declare  	 total number :=60;  	 v_count number :=1;  	begin  	  	 while total < 50 loop  	   total := total+total;  	   v_count:=v_count+1;  	 end loop;    	  	  	 dbms_output.put_line('v_count = '||v_count ||'次结果:'||total);  	end;

    3.for循环

    for loop_variable in [reverse] lower…upper loop

    end loop;

    loop_variable : 指定循环变量
    reverse : 每次递减输出.
    lower : 循环的起始值
    upper : 循环的终止值

     declare     i integer;  begin        for i in reverse 1..20 loop      dbms_output.put_line(i);    end loop;    end;
GOTO 和 NULL

goto : 跳转结构.使用goto可以跳转到指定的设定标签"<<>>"创建标签

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!