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

    1、基本结构

    CREATE OR REPLACE PROCEDURE 存储过程名字
    (
        参数1    IN NUMBER,
        参数2    IN NUMBER       
    ) IS/AS
    
    变量1    INTEGER :=0;
    变量2    DATE;
    
    BEGIN
    .
    .
    .
    END 存储过程名字

    2、SELECT INTO STATEMENT

      将select查询的结果存入到变量中,可以同时将多个列(字段)存储到多个变量中,必须有一条记录,否则抛出异常(如果没有记录,抛出NO_DATA_FOUND)

    例子:

    BEGIN 
        SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; 
        EXCEPTION 
            WHEN NO_DATA_FOUND THEN 
         ROLLBACK;
         RAISE; 
    END; 

    3、IF判断

    IF    条件1    THEN 
        Do Someting
        ELSIF    条件2    THEN
            Do Someting
        ELSIF    条件3    THEN
            Do Someting
        ELSE
            Do Someting
    
    END IF; 

    4、while循环

    WHILE V_TEST=1 LOOP 
        BEGIN 
            XXXX 
        END; 
    END LOOP; 

    5、变量赋值

    V_TEST := 123; 

    6、用for    in使用cursor(游标)

    ... 
        IS 
            CURSOR cur IS SELECT * FROM xxx; 
        BEGIN 
            FOR cur_result in cur LOOP 
                BEGIN 
                V_SUM :=cur_result.列名1+cur_result.列名2 
                END; 
            END LOOP; 
        END; 

    7、用pl/sql developer debug

      连接数据库后建立一个Test Window

      在窗口输入调用SP的代码,F9开始Debug,CTRL+N单步调试

    注意事项:

    1)存储过程参数不带取值范围,in表示传入,out表示输出;

    2)变量可带取值范围,后面接分号;

    3)在判断语句前最好先用count(*)函数判断是否存在该条操作记录

    4)用select...into...给变量赋值

    5)在代码中抛出异常用RAISE;通常的用法:

    EXCEPTION
        WHEN OTHERS THEN
            ROLLBACK;
            RAISE;
    /*
    异常分很多类,如NO_DATA_FOUND。OTHERS处本应该写异常名称,如果不想把异常分得那么细,可以笼统一点用OTHERS来捕获,即所有异常均用OTHERS来捕获。
    WHEN OTHERS THEN 表示是其它异常。
    RAISE表示抛出异常,让User可以看到。
    */

    6)AS/IS的区别

      在试图(VIEW)中只能用AS不能用IS

      在游标(CURSOR)中只能用IS不能用AS

    7)输出变量赋值有两种,一种是直接:=,还有一种就是SELECT INTO

    8)显示调试信息

      a.存储过程中在必要的位置添加

    DBMS_OUTPUT.put_line('HI');

      b.打开DBMS_OUTPUT

    show serveroutput;
    set serveroutput on;

    9)删除PROCEDURE

    DROP PROCEDURE procedure_name;
  • 相关阅读:
    css word-wrap与word-break区别
    input输入框光标位置问题
    正则表达式(二)- 位置匹配攻略
    正则表达式(一)- 字符匹配攻略
    mac电脑重启nginx报错nginx: [error] invalid PID number "" in "/usr/local/var/run/nginx.pid"
    指定js文件不使用 eslint 语法检查
    管理github/gitlab生成多个ssh key
    前端切图两种方法整理
    梳理:移动端Viewport的知识
    切图 — Photoshop(转载)
  • 原文地址:https://www.cnblogs.com/codingmengmeng/p/7392379.html
Copyright © 2011-2022 走看看