PLSQL
--匿名块
declare
    a int :=200;
    b int :=100;
    c number;
begin
    c :=(a + b)/(a - b);
    dbms_output.put_line(c);
exception
    when zero_divide then
        dbms_output.put_line('除数不能为零');
end;
Oracle独有
Procedural langguage 过程化程序设计语言 client->application->database server
  • 结构:[declare(声明)]->begin(执行)->[exception(异常处理)]->end;
  • 分类:匿名块—-命名块(子程序procedure,包)—-触发器(特殊procedure)
    • --procedure
      create [or replace] procedure |procedure_name()| is|as... --声明
      begin --执行
        ....;
      end;  --结束
      --一个存储过程
      execute proceduer_name;   --命令行执行
      procedure_name;   --匿名块里执行
      
      create or replace trigger trigger_name
        before insert or update or delete
        on table_name
      declare
        ...
      begin
        if inserting then
      
  • 事务Transaction

数据类型

  • 数值number(p,s)
  • 字符varchar2 char..
  • 日期date timestamp
  • 布尔boolean

特殊类型

  • copy 数据类型 ->|table.column|%type number(2,7)->number(2,7) ->|name| |table.column|%type
  • 复合数据类型 -> %rowtype -> cope表的数据类型 -> |name| |table|%rowtype
  • 自定义复合数据类型 -> record ->
    • type |type_name| is recoed(
        |var_name| |table.column|%type := [value];
          -------
          -------
          -------
      );    --定义类型
      |name| |type_name|;   --实例
  • session -> variable |var_name| |类型| ->select _ into_session_name_from_….
  • 替换变量 -> & 键入
    • select * from emp where deptno = &|提示|;

declare

  • (在此声明)
  • 变量->var_name varchar2(10) [:= |value|]
  • 常量->|name| constant |类型| [:= |value|]

begin

  • 变量赋值 -> select…into 变量…from…where…
  • 输出 -> dbms_output.put_line(value)
  • 流程控制
    • 选择语句
      • if [条件表达式] then…end if ;
      • if..then…else…end if;
      • is [条件表达式] then,,,elsif [条件表达式] …
      • case || when|| then
    • 循环语句
      • loop … exit when |表达式| end loop;
      • while |表达式| loop…end loop;
      • for |计数器| in [reverse] 1..100 loop …end loop ,reverse->100..1
      • for … in … loop … end loop;
    • 顺序语句
      • null
      • goto 标签,定义位置<
        • > -> goto loopstart
      • continue when |条件| -> 满足时loop从头开始
      • break when
    • 游标
      • ​ Cursor是处理数据的一种方法去查找(select)和处理(insert,delete,update)结果集,一次一行的浏览数据(缓冲区Context Area里的结果集),默认指向第一行数据的一个指针
      • 显式游标:需要声明->打开->读取->close
        • corsor corsor_name(var_name in|out var_类型:='default') is select...;   --声明corsor and var_name用于查询
          open corsor_name('value');    --打开它修改默认值
          fetch corsor_name into 变量;    --读取corsor数据并自动往下一行
          while cur_name%found loop
          --
          end loop;
          close cursor_name;
      • 属性
        • ​ %found : bool 读取成功true
          ​ %notfound : !%found
          ​ %rowcount : number,受sql影响的行数
          ​ %isopen : 游标的打开状态
      • 隐式游标:sql(内置),主要针对非查询,指向该语句的结果集

exception

...
exception
    when exception_name then
        ...
  • 自定义异常->

end