Oracle_Day09(PLSQL编程、PL\SQL块)

Oracle_Day09(PLSQL编程、PL\SQL块)

PLSQL编程

  • PL /SQL是一种高级数据库程序设计语言
  • 该语言集成于数据库服务器中
  • PL/SQL代码可以对数据进行快速高效的处理

PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL

PLSQL与SQL的处理数据的区别

--示例1 : 为每一位职员涨薪10%
Update emp  set sal = sal * 1.1

按照员工的职位进行涨薪 ,总经理涨薪10000元,部门经理涨薪8000元 其他员工统一涨薪1000元

PL/SQL块

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。
PL/SQL块的结构如下:

DECLARE 
  /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */ 
BEGIN 
  /* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */ 
EXCEPTION 
  /* 执行异常部分: 错误处理 */ 
END; 
--其中,执行部分是必须的

PL/SQL块可以分为三类:

  • 无名块:动态构造,只能执行一次。
  • 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。
  • 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
--PL/SQL   Hello World
DECLARE /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */
  str varchar2(18);
  i number;
BEGIN    /*  执行部分:  过程及SQL 语句  , 即程序的主要部分  */
  str := 'HelloWorld';
  i := 'aaa';
  dbms_output.put_line(str);
  dbms_output.put_line(i);
  EXCEPTION /* 执行异常部分: 错误处理  */
  when others then
   dbms_output.put_line('输出有误');
END;

str varchar2(18); 声明一个变量 变量名称在前 类型在后
str := ‘HelloWorld’; 为变量str赋值 := 是一个赋值运算符
dbms_output.put_line(str); 输出语句 相当于System.out.println();

DECLARE /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */
  V_name varchar2(18);
  V_number := 45;
--如果变量在声明时使用了NOT NULL,则必须为变量指定初始值,  
  i  number not null := 10;
--如果变量在声明时使用了CONSTANT,则必须为变量指定初值,并且初值不可改变。
  i CONSTANT  number := 10;

变量类型:

在这里插入图片描述

记录类型:

DECLARE
  TYPE record_type is RECORD(--相当于Java中的类
       name varchar2(20),
       age number
  );
  V_stu  record_type;
begin
       V_stu.name :='张三';
       V_stu.age := 23;
       dbms_output.put_line(V_stu.name || V_stu.age);
end;
DECLARE
  TYPE record_type is RECORD(--相当于Java中的类
       name varchar2(20),
       age number not null := 20--使用not null  必须赋初值
  );
  V_stu  record_type;
begin
       V_stu.name :='张三';
      -- V_stu.age := 23;
       dbms_output.put_line(V_stu.name || V_stu.age);
end;

引用类型:

-- 使用plsql程序来查询员工的姓名
declare 
   emprec emp.ename%type;
begin
   select ename into emprec from emp where empno=7369;
   dbms_output.put_line(emprec);
end;

RowType:

-- 查询某一个员工的信息
declare 
   e emp%rowtype;
begin
  select *  into e from emp where empno=7369;
  dbms_output.put_line(e.ename|| '    ' || e.job);
end;

运算符:

关系运算符:
在这里插入图片描述
一般运算符:
在这里插入图片描述
逻辑运算符:
在这里插入图片描述
在程序中输入一个值 根据输入的值 来输出不同的内容:

--在程序中输入一个值  根据输入的值 来输出不同的内容
declare
       done boolean;
begin
       done := &done;--该变量的值 有用户输入
       dbms_output.put_line(
            case 
               when done is null  then 'unknow'
               when done then 'yes'
               when not done then 'no'
            end
       );
end;
--循环输出10--1的数字
declare
  n number;
begin
  n := 10;
  while n > 0 loop
    dbms_output.put_line(n);
    n := n -1;
  end loop;
 end;

使用plsql完成对数据库赋值 :

-- 根据工号查询员工的  姓名  年薪

declare
   emp_id  emp.empno%Type := &emp_id;
   emp_name emp.ename%type;
   year_sal emp.sal%type;
begin
  select ename,(sal  + NVL(comm,0) ) *  12  into emp_name,year_sal
  from  emp where empno = emp_id;
  dbms_output.put_line(emp_name ||'    '|| to_char(year_sal));
end;
-- 给Emp表中插入一条记录
declare
   v_ename varchar2(20) := 'bill';
   v_sal number(7,2) := 1234.56;
   v_deptno number(2) := 10;
   v_empno emp.empno%Type := 1086;
   begin
     insert into emp (empno,ename,sal,deptno)
     values(v_empno,v_ename,v_sal,v_deptno);
     commit;
end;

分支结构:

If分支
语法1if  条件  then 语句;
		 End if;
语法2if  条件  then  语句1Else 语句2  
		End if;
语法3if 条件  then  语句1;
		Elsif 条件 then  语句2;
Elsif 条件 then  语句3;
…
Else 语句n;
End if;
-- 从键盘输入数字1  则输出 ‘您输入的值为1’
declare
   pnum number := &pnum;
 begin
   if pnum = 1 then
     dbms_output.put_line('您输入的值为1');
    end if;
end;
-- 从键盘输入数字1  则输出 ‘您输入的值为1’  否则 输出‘您输入的值不为1’
declare
   pnum number := &pnum;
 begin
   if pnum = 1 then
     dbms_output.put_line('您输入的值为1');
    else
      dbms_output.put_line('您输入的值不为1');
    end if;
end;
-- 查询员工的薪资  如果薪资 < 1000 则输出工资等级为一级  1000--2000 为二级  2000--3000为三级  3000以上为四级
-- 7369   1086    7782   7902
declare 
    v_sal emp.sal % type;
    v_empno emp.empno%type := &v_empno;
  begin
    select sal into v_sal from emp where empno=v_empno;
    if v_sal < 1000 then
      dbms_output.put_line('一级');
     elsif v_sal >= 1000 and v_sal <2000 then
        dbms_output.put_line('二级');
     elsif v_sal >= 2000 and v_sal <3000 then
        dbms_output.put_line('三级');
     else  
        dbms_output.put_line('四级');
     end if;
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值