zoukankan      html  css  js  c++  java
  • 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;
    /
  • 相关阅读:
    ajax中文乱码问题的总结
    JQuery中$.ajax()方法参数详解
    Jquery的parent和parents(找到某一特定的祖先元素)
    div节点的操作(添加,删除,替换,克隆)
    js 刷新页面
    ADO.NET 体系结构
    数据访问技术介绍
    WebForm页面数据绑定总结
    sql 智能提示
    用TTTAttributedLabel创建变化丰富的UILabel
  • 原文地址:https://www.cnblogs.com/kamil/p/6076528.html
Copyright © 2011-2022 走看看