可编程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.变量名以字母开头,不区分大小写
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循环
-
基本循环
loop
statementsexit [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可以跳转到指定的设定标签"<<>>"创建标签
来源:51CTO
作者:夜刀神十三香
链接:https://blog.csdn.net/qq_44990139/article/details/100539311