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小时内删除。