• oracle pl/sql笔记


    -- if
    declare
    pname varchar2(20) := 1;
    begin
    if pname = 1 then
    dbms_output.PUT_LINE('是1');
    elsif pname = 2 then
    dbms_output.PUT_LINE('是2');
    else
    dbms_output.PUT_LINE('其他');
    end if;
    end;

    -- while loop
    declare
    total varchar2(4) := 0;
    begin
    while total <= 100
    loop
    dbms_output.PUT_LINE(total);
    total := total + 1;
    end loop;
    end;

    -- loop exit when
    declare
    total varchar2(3) := 0;
    begin
    loop
    dbms_output.PUT_LINE(total);
    total := total + 1;
    exit when total >= 100;
    end loop;
    end;

    -- for in (适用于连续数值 total 不用自身j +1)
    declare
    total varchar2(3) := 0;
    begin
    for total in 1..100
    loop
    dbms_output.PUT_LINE(total);
    end loop;
    end;

    -- 游标 循环表数据
    declare
    -- 定义游标
    cursor c1 is select *
    from emp;
    -- 定义行级变量 变量名 表名%rowtype(行类型)
    item emp%rowtype;
    begin
    -- 打开游标
    open c1;
    loop
    fetch c1 into item;
    exit when c1%notfound;
    dbms_output.PUT_LINE(item.ENAME);
    end loop;
    -- 关闭游标 必须放在循环外面
    close c1;
    end;

    -- 异常处理
    declare
    pnum number(4) := 5;
    begin
    pnum = pnum / 0;
    exception
    -- 捕获异常
    when zero_divide then
    dbms_output.PUT_LINE('除数为0');
    when others then
    dbms_output.PUT_LINE('其他异常');
    end;

    -- 自定义异常
    declare
    prec emp%rowtype;
    cursor c1 is select *
    from emp;
    -- 定义异常
    not_data exception;
    begin
    open c1;
    loop
    fetch c1 into prec;
    if c1%notfound then
    -- 抛出异常
    raise not_data;
    end if;
    end loop;
    close c1;
    exception
    --捕获异常
    when not_data then
    dbms_output.PUT_LINE('没有数据');
    end;

    -- 带有输入参数的存储过程
    create or replace procedure addSal(pno in emp.empno%type)
    as
    prec emp%rowtype;
    begin
    select * into prec from emp t where t.EMPNO = pno;
    update emp t set t.sal = t.sal + 100 where t.EMPNO = pno;
    DBMS_OUTPUT.PUT_LINE('涨工资前:' || prec.sal || '涨工资后:' || (prec.sal + 100));
    end;

    -- 带有输入和输出参数的存储过程
    create or replace procedure countSal(pno in emp.empno%type, yasl out number)
    as
    psal emp.sal%type;
    pcomm emp.comm%type;
    begin
    select t.sal, t.COMM into psal,pcomm from emp t where t.EMPNO = pno;
    yasl := psal * 12 + nvl(pcomm, 0);
    end;
    -- 调用带输出参数的存储过程
    declare
    ysal number(10);
    begin
    countSal(7369, ysal);
    DBMS_OUTPUT.PUT_LINE(ysal);
    end;

    -- 存储函数
    create or replace function countysalfun(pno in emp.empno%type) return number
    as
    psal emp.sal%type;
    pcomm emp.comm%type;
    begin
    select t.sal, t.COMM into psal,pcomm from emp t where t.EMPNO = pno;
    return psal * 12 + nvl(pcomm, 0);
    end;
    -- 调用存储过程
    begin
    DBMS_OUTPUT.PUT_LINE(countysalfun(7369));
    end;

    -- 触发器
    create or replace trigger insterptrg
    before insert
    on person
    begin
    DBMS_OUTPUT.PUT_LINE('person 表被插入了数据');
    end;

    insert into person(userid, pname, gender, birthday)
    values (4, '张娟', 2, sysdate);

    select *
    from person;

    -- 不能在指定条件下插入数据
    create or replace trigger vailed_inster_p
    before insert
    on person
    declare
    cruday char(10);
    begin
    select to_char(sysdate, 'day') into cruday from dual;
    DBMS_OUTPUT.PUT_LINE(cruday);
    if cruday = '星期一' then
    raise_application_error(-20001, '星期一不允许插入数据');
    end if;
    end;


    -- 行级触发器
    create or replace trigger vailed_addsal
    before update of sal
    on emp
    for each row
    begin
    if :new.sal<= :old.sal then
    raise_application_error(-20002,'工资不能小于之前工资');
    end if;
    end;

    update emp set sal = sal - 100 where EMPNO = 7369;
  • 相关阅读:
    MVC框架及其应用
    《企业应用架构模式》-阅读笔记1
    《架构之美》阅读笔记3
    《架构之美》-阅读笔记2
    《架构之美》阅读笔记1
    一线架构师实践指南第三篇—— Refined Architecture(预习)
    知识图谱_示例图
    一个考研党的敷衍的毕业设计_知识图谱
    一线架构师阅读笔记三
    一线架构师阅读笔记二
  • 原文地址:https://www.cnblogs.com/yanghaoyu0624/p/14358870.html
Copyright © 2020-2023  润新知