`
jdw
  • 浏览: 158828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 存储过程的基本语法 及注意事项

    博客分类:
  • data
阅读更多

 oracle 存储过程的基本语法


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.带参数的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;

8.用pl/sql developer debug
  连接数据库后建立一个Test WINDOW
  在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试

 

关于oracle存储过程的若干问题备忘

1.在oracle中,数据表别名不能加as,如:
select a.appname from appinfo a;-- 正确
select a.appname from appinfo as a;-- 错误
     也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧
2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。
select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译
select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation 
Error: PLS-00428: an INTO clause is expected in this SELECT statement
 3.在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。
   可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select...into...
4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行
select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示
ORA-01422:exact fetch returns more than requested number of rows
 5.在存储过程中,关于出现null的问题
        假设有一个表A,定义如下:
create table A(
id varchar2(50) primary key not null,
vcount number(8) not null,
bid varchar2(50) not null -- 外键 
);
        如果在存储过程中,使用如下语句:
select sum(vcount) into fcount from A where bid='xxxxxx';
        如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:
if fcount is null then
    fcount:=0;
end if;
       这样就一切ok了。
6.Hibernate调用oracle存储过程
this.pnumberManager.getHibernateTemplate().execute(
                new HibernateCallback() ...{
                    public Object doInHibernate(Session session)
                            throws HibernateException, SQLException ...{
                        CallableStatement cs = session
                                .connection()
                                .prepareCall("{call modifyapppnumber_remain(?)}");
                        cs.setString(1, foundationid);
                        cs.execute();
                        return null;
                    }
                });
 




分享到:
评论

相关推荐

    oracle_存储过程的基本语法_及注意事项

    oracle_存储过程的基本语法_及注意事项,很好很不错的资源哦

    Oracle存储过程语法与注意事项宣贯.pdf

    Oracle存储过程语法与注意事项宣贯.pdf

    oralce入门级帮助文档,里面提供了分页,存储过程,数据库选择,表空间,oracle数据库基础语法,注意事项实例

    概述了oracle数据库的基本语法,涵盖了视图,存储过程,如何选择合适数据库,数据库分页等

    全面解析Oracle Procedure 基本语法

    主要介绍了Oracle Procedure 知识,包括oracle的存储过程注意事项方面的内容,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    Oracle常用对象大全及实例详解.pdf

    本文介绍了Oracle 中的表、索引、视图、同义词、函数、存储...测试通过的基础上,采用语法结合实例的方式,对这些常用对象使用方法、命令、步骤及注意事项进行了说明和讲解,读者按照本文学习,即可掌握这些常用对象。

    Oracle数据库、SQL

    1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程...

    Oracle_Database_11g完全参考手册.part3/3

    11.1.2 关于自动转换的注意事项 11.2 特殊的转换函数 11.3 变换函数 11.3.1 TRANSLATE 11.3.2 DECODE 11.4 小结 第12章 分组函数 12.1 groupby和having的用法 12.1.1 添加一个orderby 12.1.2 执行顺序 12.2 分组...

    Oracle_Database_11g完全参考手册.part2/3

    11.1.2 关于自动转换的注意事项 11.2 特殊的转换函数 11.3 变换函数 11.3.1 TRANSLATE 11.3.2 DECODE 11.4 小结 第12章 分组函数 12.1 groupby和having的用法 12.1.1 添加一个orderby 12.1.2 执行顺序 12.2 分组...

    最全的oracle常用命令大全.txt

    8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type='FUNCTION'; SQL>select object_name,status from user_objects where object_type='PROCEDURE';...

    oracle10g课堂练习I(2)

    动态性能视图:注意事项 4-34 小结 4-35 练习概览:管理 Oracle 实例 4-36 5 管理数据库存储结构 课程目标 5-2 存储结构 5-3 如何存储表数据 5-4 数据库块的结构 5-5 表空间和数据文件 5-6 Oracle ...

    精通SQL 结构化查询语言详解

    9.5.3 多表连接注意事项  第10章 子查询  10.1 创建和使用返回单值的子查询  10.1.1 在多表查询中使用子查询  10.1.2 在子查询中使用聚合函数  10.2 创建和使用返回多行的子查询  10.2.1 IN子查询  ...

    如何把sqlserver数据迁移到mysql数据库及需要注意事项

    在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据迁移...2、存储过程的语法存在很大的不同,存储过程的迁移是最麻烦的,需要仔细修改。 3、

    精通SQL--结构化查询语言详解

    9.5.3 多表连接注意事项 186 第10章 子查询 187 10.1 创建和使用返回单值的子查询 187 10.1.1 在多表查询中使用子查询 187 10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in...

    PLSQLDeveloper下载

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    db2-技术经验总结

    6 用load命令和identityoverride参数向有identity列的表中装载数据后的注意事项 74 1.27. 利用快照函数查询数据库服务器本地以及远程的连接数 74 1.28. 查看SQL的执行计划 74 1.29. 如何查看数据库ABC的配置文件的...

    PL/SQL Developer8.04官网程序_keygen_汉化

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    asp.net知识库

    发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser ...

    orcale常用命令

    8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type='FUNCTION'; SQL>select object_name,status from user_objects where object_type='PROCEDURE';...

Global site tag (gtag.js) - Google Analytics