oracle存储过程 --1

 一,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;-- 错误

转载于:https://www.cnblogs.com/mr-hero/p/3489851.html

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

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

相关文章

RHEL/CentOS下编译安装Nginx

##下载nginx源码:wget http://nginx.org/download/nginx-1.7.8.tar.gz tar -xv -f nginx-1.7.8.tar.gz -C /usr/local/src/##安装编译环境和必须的组件:yum groupinstall Development Tools yum install pcre pcre-devel zlib zlib-devel openssl openss…

12.13记录//QQDemo示例程序源代码

笔记的完整版pdf文档下载地址: https://www.evernote.com/shard/s227/sh/ac692160-68c7-4149-83ea-0db5385e28b0/5742995e6034e3d3f5c4793465d50a8c 笔记的文本摘要如下所示: 注意:以下仅仅是文本摘要,没有贴图,出现右边的图标()表示笔记中此处有图片,完整笔记请前往pdf链接中观…

文件IO——文件IO的API

以下内容源于网络资源的学习与整理,如有侵权,请告知删除。 文件操作的一般步骤 在Linux系统中要操作一个文件,一般是先使用open函数打开文件,得到一个文件描述符,然后对文件进行读写操作(或其他操作&#x…

【转】功能测试的经验总结

测试准备: 1、实际测试总比你预想的要花更多的时间,遇到更多的麻烦,所以要尽量争取足够的测试时间,不要不加思索的说这个东西我一星期肯定可以测完。还要尽可能考虑到测试过程中的风险,比如测试环境的问题、部署失败的…

文件IO——open函数的参数flags详解

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 在命令行中使用“man 2 open”可以获知open这个文件IO API的使用方法。 open函数的模型有两种,根据需要选择其中一种即可。 int open(const char *pathname, int flags); int open(…

oracle建库及plsql建表空间的用法

所有程序—》ORACLE-JHEMR-----------》配置和移植工具-----》DataBase Configuration Assistant-------中间就需要改一个数据仓库即可,其他的都是下一步,统一口令为**然后建监听服务,测试时改登录为system **,之后用plsql登录上&…

USACO 1.5.4 Checker Challenge

题意:经典的八皇后问题 解法: 采用朴素的每一次放置都与前面的所有行进行比较,在N 13的时候时间会爆掉 《入门经典》上提供的方法很经典,vis数组的使用,具体见《入门经典》125页 /* ID:lsswxr1 PROG:checker LANG:C */…

Spark 1.1.1 Submitting Applications

回到目录 Submitting Applications The spark-submit script in Spark’s bin directory is used to launch applications on a cluster. It can use all of Spark’s supported cluster managersthrough a uniform interface so you don’t have to configure your applicatio…

如何描述变量:存储类、生命周期,作用域、链接属性

可以根据一个变量的存储类、作用域、链接属性、生命周期来描述该变量。 其中,存储类决定了生命周期,作用域决定了链接属性。 存储类 存储类表明变量在哪里存储。见博文Linux下C语言程序的内存布局_天糊土的博客-CSDN博客 作用域 作用域表明变量起作用的…

mysql 修改表名的方法:sql语句

在使用mysql时,经常遇到表名不符合规范或标准,但是表里已经有大量的数据了,如何保留数据,只更改表名呢? 可以通过建一个相同的表结构的表,把原来的数据导入到新表中,但是这样视乎很麻烦。 能否简…

java String类 常用函数

为什么80%的码农都做不了架构师?>>> 1. 获取 int indexOf(int c) int indexOf(int c, int start) char charAt(int index) 2.判断 判断是否包含一个字符串 boolean contains(CharSequence cs) indexOf() //也可以用来判断是否包含 判断是否有内容 boole…

设备驱动程序的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、驱动的概念 设备驱动程序(Device Driver),简称驱动程序、驱动(Driver),指操作系统中用来操控硬件的代码。 驱动是硬件与操…

Android开发实践:掌握Camera的预览方向和拍照方向

Android的Camera相关应用开发中,有一个必须搞清楚的知识点,就是Camera的预览方向和拍照方向,本文就重点讨论一下这个问题。图像的Sensor方向:手机Camera的图像数据都是来自于摄像头硬件的图像传感器(Image Sensor&…

mknod命令:创建设备文件

参考博客:mknod_liangkaiming的博客-CSDN博客 参考资料:man手册 可以通过man 1 mknod查看mknod命令的内容。 1、mknod 命令的作用是make block or character special files,即创建块设备或者字符设备文件。 2、mknod 命令的格式是&#xf…

DreamWeaver使用技巧学习心得

全是我在平时学习网页时积累的,觉得会对遇到同样问题的友人有帮助,都是一些觉得困惑好久然后豁然开朗的心得。 希望大家都能体会到,解决难题后的快乐。 都是我恍然大悟的地方,不够恍然大悟的就不贴上来了。 1.让一个区块居中&…

【转】每天一个linux命令(39):grep 命令

原文网址:http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全…

SecureCRT显示乱码的解决办法

发现问题 在Ubuntu中编写代码,输出语句里带有中文,比如"printf("读出来的内容是:%s.\n", buf);"。使用交叉编译工具链编译后,将可执行程序转移至开发板系统运行,并使用SCRT来观测测试结果。此时发…

WCF数据契约

当使用DataMember时,和访问符无关,及时使用了private,成员都是可见的。相反如果使用static,为不可见。 上述的两个数据成员是等效的,如果是等效的话 数据成员的顺序也必须是相同的。 4.数据契约已知类型——使用KownTy…

Linux中NFS服务器的配置(/etc/export)

本文转载于NFS /etc/exports参数解释,有修改。 问题引入 之前利用NFS从ubuntu中下载根文件系统到开发板(见博客以NFS方式挂载rootfs的设置方法),但只是遵照教程安装的,对里面的设置含义不是很清楚。后来在开发板上上进…

cocos2d 很水很水的看法

这几天接了个扯淡的项目 cocos2d的 。 本来以为是Cpp的, 结果不是2dx ,而是OC的2d。看了几天的官方的dome ,大概知道是什么样子的。我就简单的纪录一下好了: cocos2d的整个框架呢, 分为3层 — 类似舞台剧 演戏嘛 肯定有个boss的 …