• Oracle存储过程由例子到理论


    1.基础环境

    oracle HR环境添加新表

    CREATE TABLE "HR"."cus_test" (
        "id" VARCHAR2 (255 BYTE) NOT NULL,
        "mobile" VARCHAR2 (255 BYTE) NULL,
        "name" VARCHAR2 (255 BYTE) NULL,
        "times" DATE NULL
    );
    
    ALTER TABLE "HR"."cus_test" ADD CHECK ("id" IS NOT NULL);
    
    ALTER TABLE "HR"."cus_test" ADD PRIMARY KEY ("id");

    设置自增函数

    CREATE SEQUENCE AutoID8 -- 函数名AutoID
    START WITH 2  -- 起始值 2
    INCREMENT BY 2 -- 步长 2
    MINVALUE 2 -- 最小值 2
    NOMAXVALUE;
    View Code

    2.存储过程不带参数

    CREATE
    OR REPLACE PROCEDURE vvinstat AS
    BEGIN
        INSERT INTO "HR"."cus_test" (
            "id",
            "mobile",
            "name",
            "times"
        )
    VALUES
        (
            AutoID.nextval,
            '18575511371',
            'kamil',
            SYSDATE
        ) ; COMMIT ;
    END ;
    /

    调用存储过程

    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
       VVINSTAT;
    END ;

     3.带参数IN(scott环境)

    CREATE
    OR REPLACE PROCEDURE find_emp1 (emp_no NUMBER) AS emp_name VARCHAR2 (20) ;
    BEGIN
        SELECT
            ename INTO emp_name
        FROM
            EMP
        WHERE
            empno = emp_no ; DBMS_OUTPUT.PUT_LINE (
                '雇员姓名:' || emp_name
            ) ; EXCEPTION
        WHEN no_data_found THEN
            DBMS_OUTPUT.PUT_LINE ('雇员编号没有找到') ;
        END ;
    /

    执行

    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
       FIND_EMP1(7566);
    END ;
    -- PL/SQL 过程已成功完成。
    -- 雇员姓名:JONES
    /*
    雇员编号没有找到
    */

     4.参数out(scott)

    CREATE
    OR REPLACE PROCEDURE my_proc_out (
        value1 IN NUMBER,
        value2 out NUMBER
    ) IS salary NUMBER ;
    BEGIN
        SELECT
            sal INTO salary
        FROM
            emp
        WHERE
            empno = value1 ;
        IF salary < 8000 THEN
            value2 := salary + 500 ; UPDATE emp
        SET sal = value2
        WHERE
            empno = value1 ;
        ELSE
            value2 := salary ;
        END
        IF ;
        END ;
    /

    执行:

    SET SERVEROUTPUT ON
    DECLARE v1 NUMBER := 7566 ; v2 NUMBER ;
    BEGIN
        MY_PROC_OUT (v1, v2) ; DBMS_OUTPUT.PUT_LINE (
            'v2 的值为' || TO_CHAR (v2)
        ) ;
    END ;
    /

     5.IN OUT(scott)

    CREATE or REPLACE PROCEDURE test_IN_OUT 
    (v1 in out number,
    v2 in out number)
    is
    value1 number:=0;
    BEGIN
    value1 :=v1;
    v1 :=v2;
    v2 :=value1;
    dbms_output.put_line('v1:'||v1||'  '||'v2:'||v2);
    end;
    /

    调用()

    set SERVEROUTPUT ON
    DECLARE 
    value1 number :=11111;
    value2 number :=22222;
    BEGIN
    test_IN_OUT(value1,value2);
    end;
    /
  • 相关阅读:
    Lucky Substrings
    KMP
    圆桌问题(hdu4841)
    codeforces 624C Graph and String
    Joseph(hdu1443)
    The Longest Straight(FZUoj2216)
    C1. 组队活动 Small(BNUOJ)
    A1. 道路修建 Small(BNUOJ)
    Problem 2221 RunningMan(fuzoj)
    CODEFORCEs 621E. Wet Shark and Blocks
  • 原文地址:https://www.cnblogs.com/kamil/p/6076528.html
Copyright © 2020-2023  润新知