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

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(50primary key not null,
vcount 
number(8not null,
bid 
varchar2(50not 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;
                    }

                }
);

转载于:https://www.cnblogs.com/soundcode/archive/2011/12/31/2308718.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

function——函数声明头的提升和预解析

函数: 即function语句的集合,就是将多个语句封装到一起; 函数的执行要会自己遍历,遇见函数 a();执行语句,就要移交控制权,函数执行完毕之后,控制权又移交回…

在JDeveloper 12.1.3中将Java API用于WebSockets

介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上,从12.1.2.0版本开始就支持WebSocket协议(RFC 6455&#xff0…

基于Verilog语言的伪随机码的编写

写之初,笔者并没有太大的自信,因为笔者对伪随机码并没有太多的认识。但老师有命,笔者不得不进行编写,同时笔者也特别希望能有个项目来锻炼自己。 笔者在开始编写的时候,首先上网查了很多的资料,对伪随机码算…

【HBuilder】手机App推送至Apple App Store过程

一、前言 最近由于公司同事离职,顶替这位同事从事手机App的研发工作,BIM数据平台部门采用的是HBuilder作为手机App的制作环境。本篇介绍我是如何将HBuilder的Release包发布至App Store的。 二、内容 1. 首先登录Apple Developer网站 2. 点击iTunes Conn…

Java性能调优调查结果(第四部分)

这是系列文章中的最后一篇,我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果。如果您还没有阅读第一篇文章,我建议您首先阅读以下内容: 性能问题的频率和严重性 最受欢迎的监控解决方案 查找根本原因的工具和技术 …

2012年第一个工作日

换代理尝试,竟然可以发博客了。以前的博客太散乱,打算在这里安家。 今天花了一上午时间,在各大网站不停地晃。希望自己能够弄清楚这个快速变化的世界。 2012确切的目标: 1. 工作仍然是首要的,锻炼的能力不同而已&#…

基于ArcEngine的插件式框架

先整理下,过几天把我以前用过的一个插件式GIS框架共享出来。转载于:https://www.cnblogs.com/songhuaiyu/archive/2010/08/16/1800854.html

【JQuery】选择器

一、前言 上一章学习完了Js的一些基本内容,本章开始学习JQuery语法。JQuery的基础语法是: $(selector).action() 那么重要的两个元素,一个是选择器,另一个是行为!本章开始学习JQuery的选择器。 二、内容 $("*&quo…

android eclipse 配置 在项目右击选择properties

转载于:https://www.cnblogs.com/guoxiaoyue/p/3485243.html

减少主要GC暂停的频率

这篇文章将讨论一种技术,以减少应用程序等待时间造成的垃圾收集暂停的负担。 正如我几年前所写, 在JVM中无法禁用垃圾收集 。 但是,有一个巧妙的技巧可以用来大大减少长时间停顿的时间和频率。 如您所知,JVM中发生了两个不同的GC…

软件工程中交流的思考

良好的交流可以有效的降低项目的开发成本,相反不但可能数倍的增加成本,甚至可能导致项目的失败。 怎样在项目执行过程进行有效的交流呢? 1. 识别项目中交流主体。 2. 明确交流主题、内容、目标。 3. 做好交流记录、分析、整理、执行。 4. 交流…

【WebGL】《WebGL编程指南》读书笔记——第2章

一、前言 最近看了《WebGL编程指南》这本书&#xff0c;发现还是很有意思的&#xff0c;故每章阅读后做个笔记。 二、正文 Example1&#xff1a;在canvas中绘制2D矩形 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /&…

一个人的网站开发

从零开始开发一个全栈Web应用实录 https://blog.csdn.net/weixin_31347831/article/details/74625813 如何用PHP完整的开发一个网站&#xff1f; https://blog.csdn.net/a6984021/article/details/88787885 一个人如何完成一整个网站的开发&#xff08;推荐好文&#xff0c;看完…

WAI-ARIA对自动完成小部件的支持

在本文中&#xff0c;我想讨论AutoComplete小部件的可访问性。 在您键入该字段时&#xff0c;通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中&#xff0c;我基于Twitter的Typeahead &#xff08;一个灵活JavaScript库&#xff09;实现了JSF组件&#xff0c;该库为…

eclipse中java.lang.OutOfMemoryError: Java heap space错误

Myeclipse中报java.lang.OutOfMemoryError: Java heap space错误 解决办法: 选中被运行的类&#xff0c;点击菜单‘run->run Configuration’&#xff0c;选择(x)Argument标签页下的vm arguments框里 输入 -Xmx800m, 保存运行。问题解决 转载于:https://www.cnblogs.com/vig…

[Vue warn]: Invalid prop: custom validator check failed for prop xxx.问题

在用vue ui框架&#xff08;iview、elementui等&#xff09;做项目&#xff0c;会遇到这种问题 这样的&#xff0c;点那都报错&#xff0c;千辛万苦的付出&#xff0c;却找不到问题在哪 其实很简单&#xff0c;报错都显示出那个组件的问题了 ‘<Form>’这个组件&#xf…

CheckList 如何梳理可减少上线的验证时间(总结篇)

对CheckList的执行发起的思考&#xff1f; &#xff08;1&#xff09;功能越来越多&#xff0c;CheckList越补充越多&#xff0c;执行CheckList时间越来越长&#xff0c;如何减少上线的验证时间&#xff1f;&#xff08;2&#xff09;减少上线验证的时间外&#xff0c;如何保证…

PrimeFaces 5.0 DataTable列切换器

我有机会与PrimeFaces 5.0 DataTable一起工作&#xff0c;并且增强功能很棒。 今天&#xff0c;我只想展示其中的一项新功能……DataTable列切换器。 此功能使您可以通过复选框列表选择显示哪些列。 要使用列切换器&#xff0c;只需添加一个commandButton即可将列选择的选择列…

[恢]hdu 2016

2011-12-14 04:21:57 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2016 题意&#xff1a;中文。 mark&#xff1a;wa了2次&#xff0c;a^b^a^b这种交换只能用在a和b不同的时候&#xff0c;否则清零。没考虑第一个元素就是最小值的情况。 代码&#xff1a; # in…

CSS3总结(干货)

1、css3中好用的选择器   :target       //突出显示活动的HTML锚 ::after / ::before{content:" ";}  //content必须有&#xff0c;若无内容&#xff0c;用空格占位 2、文字 a.导入字体&#xff1a; font-face b.文字阴影&#xff1a;text-shadow ps:相…