PL/SQL:是过程化/sql的缩写,是Oracle在sql的基础之上扩展来的一种数据库编程语言,在兼容sql的基础之上,扩充了许多新功能,是面向过程化语言和sql的结合。
PL/SQL特点:
·除了基本的sql之外,包含了控制结构和异常处理,从而具有了sql语句的简洁性和过程性。
·每个sql语句的请求处理,都会引起一次网络的传输,用户量一旦大量增加,可能会导致网络堵塞,而PLSQL是将整个语句块发送给数据库服务器,减少了网络通信的数量,提高了应用程序的运行效率。
·PLSQL语句是存储在Oracle服务器上,可以被其他的PLSQL程序或者sql调用。具有很高的重用性。
·PLSQL程序语言是一种块结构语言,PLSQL的基本代为是块。
PLSQL程序块有两种:
·匿名块:没有名称,只用一次,不能存储在数据库中
·命名块:指的是保存在数据库中的PLSQL程序块,比如我们的存储过程、函数和触发器
块的基本结构:
·匿名块的基本结果
declare -- 可选 begin update dh02t_person set p_name='李四' where p_id = 14; --exception 可选 commit; end; |
declare:声明部分,用来声明程序中的变量、类型、游标等等。
declare pname varchar2(20) := '朱炳宇'; begin update dh02t_person set p_name=pname where p_id = 14; --exception 可选 commit;--提交 end; |
begin:是PLSQL程序的主体部分,一般使用sql语句或者过程化语言来处理特定的操作。
exception:异常的处理部分,用来检查和处理异常或者错误。
块中的每一条语句都需要以分号结束,一条sql可以分成多行来写,但是最终只需要一个分号。
注释:在PLSQL中,注释分为两种,一种单行注释“--”,两外就是多行注释”/* 需要注释的内容*/”
范例:向表中插入一笔数据并且提交。
declare pid number(18) ; pname varchar2(20); psex number(1); pbir date; begin --给变量赋值 pid := 20; pname := '姜建民'; psex := 1; pbir := to_date('1988-11-12','yyyy-mm-dd'); insert into dh02t_person(p_id,p_name,p_sex,p_bir) values (pid,pname,psex,pbir); commit;--提交 end; |
声明常量和变量
·声明常量:常量名 constant 类型(长度) := 值
declare pid constant number(18) := 29;--声明常量 begin pid := 90;--不能再次赋值 end; |
constant:表示的就是固定不变的,就是我们说的常量。声明之后不允许改变。
·声明变量:变量名 类型(长度) (not null) (default | := )
pid number(18) not null default 21; |
声明变量和常量中一些规则:
·一行只能声明一个变量或者常量
·变量时存储值的内存区域,用来处理程序中的值,变量名称不能重复,也不能使用系统关键字。
·变量名称以字母开头(不区分大小写),可以由字母,数字,下划线组成。
·变量名称的长度不能超过30个字符
·分支结果
在PLSQL中分支分为两种:
·if then els(if then elsif then。。els)
·case(when 。。。else),是按照顺序检查表达式的值,如果一旦到,则跳出case语句。
范例:对dh02t_student表中的java_score成绩字段做一个等级。50-60:优,40-50:良,30-40:及格,30以下,挂了
·使用第一种语法
declare score number(2); level_score varchar2(3); begin select java_score into score from dh02t_student where stu_id=1;--将查询的值赋给变量score if score >=50 then level_score := '优'; elsif score >=40 then level_score := '良'; elsif score >=30 then level_score := '及格'; else level_score := '挂科'; end ifsql语句实现的四种功能; dbms_output.put_line(level_score); end; |
·使用第二种语法:
declare score number(2); level_score varchar2(3); begin select java_score into score from dh02t_student where stu_id=1;--将查询的值赋给变量score case when score >=50 then level_score := '优'; when score >=40 then level_score := '良'; when score >=30 then level_score := '及格'; else level_score := '挂科'; end case; dbms_output.put_line(level_score); end; |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论