1.匿名代码块

declare

  --申明变量的地方

begin

  --sql语句的地方

end

2.变量

  命名规范:使用大小驼峰命名,或者使用连字符

  格式:变量名 数据类型 := 初始值

  将查询结果赋值给变量:select 列明 into 变量名 from 表名 where confident

  代码块中的select语句有且仅有一条查询结果,否则报错

3.可以将表中的字段的变量类型使用    字段名%type     引用出来给变量使用;表格所有列使用 表名%rowtype引用

4.自定义类型

  type 自定义变量名 is record(

    变量名1 数据类型1,

    变量名2 数据类型2,

    ...

  );

5.输入输出

  输出:dbms_output.putline(输出类容)

  输入:使用    :=&提示语句    来输入,字符串带引号 

6.分支判断

  if 判断条件 then

    sql语句

  elsif 判断条件 then

    sql语句

       ....

  else

    sql语句

end if;

7.动态sql

  execute immediate 'sql语句‘ into 输出的变量 using in 条件输入的变量名字

8.循环控制

  1.for 循环

    for i in 循环的数据(列表,查询结果等) loop

      sql语句

    end loop;

  2.while循环

    while 判断条件 loop

      sql 语句

    end loop;

  3.loop循环

    loop

      sql语句

      exit when 循环结束条件

      sql语句

    end loop;

  循环控制语句

    exit 跳出整个循环

    continue 跳出本次循环

9.游标

  静态游标

  --声明游标 

    cursor 游标名字 is select语句

  --打开游标

    open 游标名字

  --移动游标指针

    fetch 游标名字 into 变量名

  --关闭游标

    close 游标名字

  动态游标:先声明,但是不赋值,使用时再使用select语句赋值,动态游标除了声明方式和静态不一样,其他操作一致

       type 动态游标类型 is ref cursor ;

       上条语句定义的动态游标类型 游标名称;

  隐形游标 sql

    sql%found  判断有操作的数据返回true

    sql%notfound 判断没有操作的数据返回true

    sql%rowcount 返回影响的行数

    sql%isopen 判断显性游标是否打开

10.异常处理

  declare

    --声明变量的地方

  begin

    --正常代码的地方

  exception 

    when other then:

    出现异常后执行的代码

  end;

  自定义异常:raise_application_error(异常编号(-20000到-20999),异常描述)

  常见异常:

  access_into_null(ora-06530):未定义对象

  collection_not_found(ora-06592):集合元素未初始化

  dup_val_on_index(ora-00001):唯一索引上有重复的值

  too_many_rows(ora-01422):select into时结果超过一行

  zero_divide(ora-01476):除数为0

11.存储过程

  是一个由名称的代码块,存储过程可以在以后被反复的调用

  使用存储过程的场景:

    1.为了减少表格对服务器的访问次数,减少sql对硬盘的读写次数,将经常使用的sql写到存储过程中

    2.固定的操作,如每天给表格中添加分区

    3.比较复杂的操作,可以使用多个sql来写,就可以使用存储过程来写

    4.对表格数据的抽取、操作和存储,可以把etl过程写入存储过程

  语法:

    create or repalce procedure 存储过程的名字(参数名称 in/out 参数的数据类型) is

                 --声明变量的地方

    begin

      --编写代码的地方

    end

  调用:

    call 存储过程名()  --适合无参的存储过程

    declace

    begin 

    存储过程名() --适合有参的存储过程

    end;

12.自定义函数

  create or replace function 函数名称(输入参数 参数类型) return 返回的数据类型 is

    --声明变量的地方

  begin

    --写代码的地方

  end;

  函数和存储过程的区别:

    1.存储过程可以没有参数,函数很少没有存储过程

    2.函数返回值用return,存储过程使用out

    3.存储过程可以使用call或者在代码块中调用,函数是dql和dml语句中调用的

    4.函数中不能执行DDL、TCL、DML语句,存储过程中是可以的

13.触发器

  触发器不需要调用,在操作表时会自动调用

  :new.列名   影响后的数据

  :old.列明     影响前的数据

  1.前置触发器:使用before来修饰,一般用于数据校验

  2.后置触发器:使用after来修饰,一般用来备份数据

  3.创建语法:

    create or replace trigger 触发器名字 before/after

    update or insert or update on 表名 

    for each row

    declare

      --声明变量的地方

    begin

      --代码编写的地方

    end; 

14.拉链表

  在一个表格中,使用一个开始时间和结束时间来记录数据变化的表格

  一般情况下,在修改主表的时候通过触发器来修改拉链表中的数据

15.数据的包

  包的规范:专门用来声明在包里面的存储过程和函数的概念

  语法:

    create or replace package 包名 is

    --声明存储过程

    procedure 存储过程名字(参数)

    --声明函数

    function 函数名称 (参数)return 返回值类型

    end 包名;

  包体:对已经声明好的存储过程和函数进行代码逻辑的完善

         create or replace package body 包体的名 is

    --声明存储过程

    procedure 存储过程名字(参数)is

    begin

      --代码逻辑

    end;

    --声明函数

    function 函数名称 (参数)return 返回值类型 is

     begin

      --代码逻辑

    end;

 

 

    

   

      

 

posted on 2022-12-07 19:35  银光短战棍  阅读(29)  评论(0)    收藏  举报