zoukankan      html  css  js  c++  java
  • 存储过程

    --存储过程
    --创建存储过程
    CREATE OR REPLACE PROCEDURE add_emp
    (eno NUMBER,
    ename VARCHAR2,
    salary NUMBER,
    dno NUMBER,
    job VARCHAR2 DEFAULT 'clerk'
    )IS
    BEGIN
    INSERT INTO emp
    (empno,ename,sal,job,deptno)
    VALUES
    (eno,ename,salary,job,dno);
    END;

    --调用存储过程
    BEGIN
    --按位置
    add_emp(1115,'aaaa',20000,10,'manager');
    --按名字
    add_emp(dno=>10,eno=>1116,ename=>'aaaa',salary=>20000,job=>'manager');
    --混合
    add_emp(1117,dno=>10,ename=>'aaaa',salary=>20000,job=>'manager');
    END;

    COMMIT;

    select * from emp


    --带默认参数
    BEGIN
    --按位置
    add_emp(2221,'aaaa',20000,10);
    --按名字
    add_emp(dno=>10,eno=>2222,ename=>'aaaa',salary=>20000);
    --混合
    add_emp(2223,dno=>10,ename=>'aaaa',salary=>20000);
    END;

    select * from emp
    -----------------------------------------------------------------------------
    -- IN out in out
    CREATE OR REPLACE PROCEDURE s(
    A PLS_INTEGER,
    B IN PLS_INTEGER,
    C OUT PLS_INTEGER,
    D IN OUT PLS_INTEGER
    )IS
    BEGIN
    IF C IS NULL THEN
    dbms_output.put_line('UNLL');
    ELSE
    dbms_output.put_line(C);
    END IF;
    dbms_output.put_line(D);
    C:=A+1;
    D:=10/B;
    END;


    DECLARE
    aa constant PLS_INTEGER:=1;
    bb PLS_INTEGER:=2;
    cc PLS_INTEGER:=3;
    dd PLS_INTEGER:=4;
    BEGIN
    s(aa,bb,cc,dd);
    dbms_output.put_line('调用存储过程s之后');
    dbms_output.put_line('aa:'||aa);
    dbms_output.put_line('bb:'||bb);
    dbms_output.put_line('cc:'||cc);
    dbms_output.put_line('cc:'||dd);
    END;


    --调试存储过程授权
    grant debug CONNECT SESSION to scott

    -----------------------------------------------------------------------------------------------------------------------------

    --创建存储过程 带异常处理
    CREATE OR REPLACE PROCEDURE add_emp
    (eno NUMBER,
    ename VARCHAR2,
    salary NUMBER,
    dno NUMBER,
    job VARCHAR2 DEFAULT 'clerk'
    )IS
    BEGIN
    IF LENGTH(eno)<4 THEN
    raise_application_error(-20000,'员工编号不能小于4位');
    END IF;
    INSERT INTO emp
    (empno,ename,sal,job,deptno)
    VALUES
    (eno,ename,salary,job,dno);
    EXCEPTION
    WHEN others THEN
    dbms_output.put_line(sqlerrm);
    RAISE;
    END;


    DECLARE
    emp_20000 EXCEPTION;
    pragma exception_init(emp_20000,-20000);
    emp_null_error EXCEPTION;
    pragma exception_init(emp_null_error,-1400);
    emp_no_depton exception;
    pragma exception_init(emp_no_depton,-2291);
    BEGIN
    --员工编号小于4位
    --add_emp(11,'aaaa',20000,10,'manager');
    --部门不存在
    --add_emp(3333,'aaaa',20000,100,'manager');
    --部门为空
    add_emp(3332,'aaaa',20000,null,'manager');
    --雇员编号重复
    --add_emp(1113,'aaaa',20000,10,'manager');
    EXCEPTION
    WHEN emp_20000 THEN
    dbms_output.put_line(sqlerrm(-20000));
    WHEN dup_val_on_index THEN
    dbms_output.put_line('雇员编号不能重复');
    WHEN emp_null_error THEN
    dbms_output.put_line('部门编号不为空');
    WHEN emp_no_depton THEN
    dbms_output.put_line('部门编号不存在');
    when OTHERS then
    dbms_output.put_line('其他异常');
    END;


    --------------------------------------------------------------------------------------

    --规范化存储过程
    CREATE OR REPLACE PROCEDURE add_emp1(
    eno emp.empno%TYPE,
    name emp.ename%TYPE,
    salary emp.sal%TYPE,
    dno emp.deptno%TYPE,
    job emp.job%TYPE DEFAULT 'clerk',
    on_flag out NUMBER,
    os_msg out VARCHAR2
    )
    IS
    e_eno EXCEPTION;
    BEGIN
    IF LENGTH(eno)<4 THEN
    RAISE e_eno;
    END IF;
    INSERT INTO emp(empno,ename,sal,job,deptno)VALUES(eno,name,salary,job,dno);
    on_flag:=1;
    os_msg:='成功';
    EXCEPTION
    WHEN e_eno THEN
    on_flag:=-1;
    os_msg:='编号不能小于4位';
    WHEN dup_val_on_index THEN
    on_flag:=-2;
    os_msg:='雇员一存在';
    WHEN OTHERS THEN
    on_flag:=-3;
    os_msg:='其他错';
    END;


    DECLARE
    on_flag NUMBER;
    os_msg VARCHAR2(100);
    BEGIN
    add_emp1(1115,'aaaa',20000,10,'ssss',on_flag,os_msg);
    dbms_output.put_line(on_flag||os_msg);
    END;

    select * from emp

    --删除存储过程
    drop procedure s

  • 相关阅读:
    对《分享一下自己用c++写的小地图》一文的补充
    大神的Blog挂了,从Bing快照里复制过来的备份
    如何创建独立的UE4服务端
    打包如何打包额外文件,比如Sqlite数据库的db文件
    关于如何通过定义自己的CameraManager来控制视角
    Slate中绑定动态数据
    分享一下自己用c++写的小地图
    2016.8看到的一些有用的文章
    如何在插件中添加Actor类
    如何使用的Ue4自带的SQLiteSupport
  • 原文地址:https://www.cnblogs.com/qjt970518--/p/7586222.html
Copyright © 2011-2022 走看看