存储过程基本语法

1.基本结构 

CREATE OR REPLACE PROCEDURE 存储过程名字
      (
            参数1 IN NUMBER,
            参数2 IN NUMBER
      ) IS
      变量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
               xxxx;
END;

3.IF 判断

IF V_TEST=1 THEN
   BEGIN 
      do something
   END;
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.异常中的错误代码和错误消息

      Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。
   OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话,将可以确保所有的错误都会被检测到。
    在一个内在的异常中,SQLCODE返回Oracle错误的序号,而SQLERRM返回的是相应的错误消息,错误消息首先显示的是错误代码。SQLCODE返回的是负数,除非Oracle的错误为“ORA-01403:NO DATA FOUND”(译:ORA-01403:未找到数据),当Oracle错误为“ORA-01403:NO DATA FOUND”时,其对应的SQLCODE为+100。对于用户自定义的异常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception。
    一个Oracle的错误消息最多只能包含512个字节的错误代码。如果没有异常被触发,则SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。

...

    EXCEPTION
      WHEN OTHERS THEN
          ROLLBACK;
          c_sqlcode := SQLCODE;
          c_sqlerrm := SUBSTRB(SQLERRM, 1, 512);
          o_sts        := ‘-1’;
          c_error      := c_process_sts_error;
END PROC_SEND_RECEIVE_ERR_INS;

猜你喜欢

转载自my.oschina.net/u/3409039/blog/1579430