一,oracle存储过程语法
 
 
 
1.oracle存储过程结构
 
CREATE OR REPLACE PROCEDURE oracle存储过程名字
 
(
 
    参数1 IN NUMBER,
 
    参数2 IN NUMBER
 
) IS
 
变量1 INTEGER :=0;
 
变量2 DATE;
 
BEGIN
 
END oracle存储过程名字
 
 
 
2.无返回值的oracle存储过程
 
create or replace procedure xs_proc_no is
 
begin
 
  insert into xuesheng values (3, 'wangwu', 90, 90);
 
  commit;
 
end xs_proc_no;
 
 
 
3.有单个数据值返回的oracle存储过程
 
create or replace procedure xs_proc(temp_name in varchar2,
 
                                    temp_num  out number) is
 
  num_1 number;
 
  num_2 number;
 
begin
 
  select yu_wen, shu_xue
 
    into num_1, num_2
 
    from xuesheng
 
   where xing_ming = temp_name;
 
  --dbms_output.put_line(num_1 + num_2);
 
  temp_num := num_1 + num_2;
 
end;
 
其中,以上两种与sql server基本类似,而对于返回数据集时,上述方法则不能满足我们的要求。在Oracle中,一般使用ref cursor来返回数据集。示例代码如下:
 
 
 
4.有返回值的oracle存储过程(列表返回)
 
首先,建立我们自己的包。并定义包中的一个自定义ref cursor
 
create or replace package mypackage as
 
  type my_cursor is ref cursor;
 
end mypackage;
 
在定义了ref cursor后,可以书写我们的程序代码
 
create or replace procedure xs_proc_list(shuxue   in number,
 
                                         p_cursor out mypackage.my_cursor) is
 
begin
 
  open p_cursor for
 
    select * from xuesheng where shu_xue > shuxue;
 
end xs_proc_list;
 
 
 
5.SELECT INTO STATEMENT
 
  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
 
  记录,否则抛出异常(若没有记录则抛出NO_DATA_FOUND)
 
  例子:
 
  BEGIN
 
  SELECT name,age into 变量1,变量2 FROM user where xxx;
 
  EXCEPTION
 
  WHEN NO_DATA_FOUND THEN
 
      xxxx;
 
  END;
 
  ...
 
 
 
6.IF 判断
 
  IF V_TEST=1 THEN
 
    BEGIN
 
       do something
 
    END;
 
  END IF;
 
 
 
7.WHILE 循环
 
  WHILE V_TEST=1 LOOP
 
  BEGIN
 
 XXXX
 
  END;
 
  END LOOP;
 
 
 
8.变量赋值
 
  V_TEST := 123;
 
 
 
9.用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;
 
 
 
10.带参数的CURSOR
 
  CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
 
  OPEN C_USER(变量值);
 
  LOOP
 
 FETCH C_USER INTO V_NAME;
 
 EXIT FETCH C_USER%NOTFOUND;
 
    do something
 
  END LOOP;
 
  CLOSE C_USER;
 
 
 
11.用pl/sql developer debug
 
  连接数据库后建立一个Test WINDOW
 
  在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
 
 
 
二,oracle存储过程的若干问题备忘
 
 
 
1.在oracle中,表别名不能加as,如:
 
select a.name from user a;-- 正确
 
select a.name from user as a;-- 错误

oracle存储过程 --1的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  4. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  9. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  10. C# 获取 oracle 存储过程的 返回值1

    /// <summary> /// 返回对应表的模拟自增字段值 /// </summary> /// <param name="tablename"& ...

随机推荐

  1. [转] git config命令使用第一篇——介绍,基本操作,增删改查

    平时我们在使用git的时候,很少去关注其配置是如何,而在实际开发中,对git config这个命令的使用也并不是很多,但是配置对一个程序和项目来说都是很重要的,我们今天来看看git的配置以及git c ...

  2. codevs1380 没有丧尸的舞会

    /* 树形DP 而然我并不知道树在哪(....) f[x][0]表示x节点不参加舞会 以x为根的子树的最优解 f[x][1]表示x节点参加舞会 以x为根的子树的最优解 方程为:(so为x的儿子 so要 ...

  3. 处理ASP.NET 请求(IIS)(2)

    ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...

  4. iOS Safari 中点击事件失效的解决办法

    问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. ...

  5. C#内存修改

    先通过 System.Diagnostics.Process类获取想要编辑的进程 调用API [Flags]                    public enum ProcessAccessT ...

  6. jquery生成UUID的方法

    来源:  http://www.broofa.com/2008/09/javascript-uuid-function/ 1.代码:  http://www.broofa.com/Tools/Math ...

  7. java 进制.

    /* 整数的'3'种表现形式: 1,十进制. 2,八进制. 3,十六进制. */ public class IntegerDemo { public static void main(String[] ...

  8. 226. Invert Binary Tree(C++)

    226. Invert Binary Tree Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 ...

  9. cetos 6.3 安装 apache+mysql+php

      1.安装 apache 服务器 yum install httpd 启动服务 service httpd start or /etc/init.d/httpd start 2.安装 mysql 数 ...

  10. Bootstrap_Javascript_手风琴

    触发手风琴可以通过自定义的 data-toggle 属性来触发.其中data-toggle值设置为 collapse,data-target="#折叠区标识符". 第一步,设计一个 ...