20201204 王维

学习总结

PL/SQL块

1 变量声明

变量名 数据类型[ :=初始值];

PL/SQL支持SQL中的数据类型,PL/SQL中正常支持NUMBER,VARCHAR2,DATE等Oracle SQL数据 类型。声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量声明必须在声明部 分。

2 声明常量

declare
  pi constant number := 3.14;
  r number := 5;
  area number;
begin
  area := power(r , 2) * pi;
  dbms_output.put_line('圆的面积是:' || area);
end;

常量在声明时赋予初值,并且在运行时不允许重新赋值。使用CONSTANT关键字声明常量。 声明常量时使用关键字CONSTANT,常量初值可以使用赋值运算符(:=)赋值,也可以使用 DEFAULT关键字赋值。

dbms_output.put_line是输出语句,可以把一个变量的值输出,在SQLPlus中输出数据时,可能没 有结果显示,可以使用命令: set serveroutput on 设置输出到SQLPlus控制台上。

3 属性数据类型

declare
  emp_scott emp%rowtype;
begin
  select * into emp_scott from emp where empno = 7788;
  dbms_output.put_line('emp_scott.ename = ' || emp_scott.ename);
end;

declare
  sal emp.sal%type;
  mysal number(4):=3000;
  totalsal mysal%type;
begin
  select sal into sal from emp where empno = 7934;
  totalsal := sal + mysal;
  dbms_output.put_line(totalsal);
end;

当声明一个变量的值是数据库中的一行或者是数据库中某列时,可以直接使用属性类型来声明。Oracle 中存在两种属性类型:%TYPE和%ROWTYPE。

% ROWTYPE 引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL附加的数据类 型。表示一条记录,就相当于Java中的一个对象。可以使用“.”来访问记录中的属性。

%TYPE 引用某个变量或者数据库的列的类型作为某变量的数据类型。

4 CASE

declare
       v_grade char(1) := upper('&p_grade');
begin
  case v_grade
    when 'A' then
      dbms_output.put_line('Excellent');
    when 'B' then
      dbms_output.put_line('vary Good');
    when 'C' then
      dbms_output.put_line('Good');
    else
      dbms_output.put_line('No such grade');
  end case;
end;

declare
  v_grade char(1) := upper('&grade');
  p_grade varchar2(20);
begin
  p_grade :=
  case v_grade
    when 'A' then
      'Excellent'
    when 'B' then
      'Very Good'
    when 'C' then
      'Good'
    else
      'No such grade'
  end;
  dbms_output.put_line('Grade:' || v_grade || ', the result is ' || p_grade);
end;

declare
  v_grade char(1) := upper('&grade');
  p_grade varchar2(20);
begin
  p_grade :=
  case
    when v_grade = 'A' then
      'Excellent'
    when v_grade = 'B' then
      'Very Good'
    when v_grade = 'C' then
      'Good'
    else
      'No such grade'
  end;
  dbms_output.put_line('Grade:' || v_grade || ', the result is ' || p_grade);
end;

CASE是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动作。也可以作为 表达式使用,返回一个值。类似于Java中的switch语句。

& grade表示在运行时由键盘输入字符串到grade变量中。

v_grade分别于WHEN后面的值匹配,如果成功就执行WHEN后的程序序列。

CASE语句还可以作为表达式使用,返回一个值,注意此时的end case变为了end

PL/SQL还提供了搜索CASE语句。也就是说,不使用CASE中的选择器,直接在WHEN后面判断条件,第 一个条件为真时,执行对应THEN后面的语句序列。

5 游标 Cursor

declare
  cursor empdate is select * from emp;
  emp_row emp%rowtype;
begin
  open empdate;
  loop
    fetch empdate into emp_row;
    exit when empdate%notfound;
    emp_row.sal := emp_row.sal + 
    case emp_row.job
      when 'PRESIDENT' then
        1000
      when 'MANAGER' then
        800
      else
        400
      end;
    update emp set sal = emp_row.sal where empno = emp_row.empno;
    commit;
  end loop;
  close empdate;
end;

在写 java 程序中有集合的概念,那么在 pl/sql 中也会用到多条记录,这时候我们就要用到游标,游标 可以存储查询返回的多条数据。

CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;

游标的使用步骤:

  1. 打开游标: open c1; (打开游标执行查询)
  2. 取一行游标的值:fetch c1 into pjob; (取一行到变量中)
  3. 关闭游标: close c1;(关闭游标释放资源)
  4. 游标的结束方式 exit when c1%notfound

心得体会

今天学习了Oracle的高级特性,对mysql的内容进行了一定的学习,还学习了plsql语句,很多语法结构类似于java的语法,但是不同的地方还是要多多注意。

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1