oracle存储过程语法与使用

oracle存储过程语法与使用oracle存储过程的基本语法1.基本结构  1CREATEORREPLACEPROCEDURE存储过程名  2IS  3BEGIN  4NULL;  5END;行1:CREATEORREPLACEPROCEDURE是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程,如果存在就覆盖它;行2:  IS关键词表明后面

大家好,又见面了,我是你们的朋友全栈君。

oracle 存储过程的基本语法

1.基本结构

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

行1:
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:
  IS关键词表明后面将跟随一个PL/SQL体。
行3:
  BEGIN关键词表明PL/SQL体的开始。
行4:
  NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
行5:
  END关键词表明PL/SQL体的结束
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.SYS_REFCURSOR 型游标,该游标是Oracle 以预先定义的游标,可作出参数进行传递 。(带参数的游标)
例子1:
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;
例子2:
create or replace procedure test(rsCursor out SYS_REFCURSOR) is

cursor SYS_REFCURSOR;

name varhcar(20);

begin

OPEN cursor FOR select name from student where … –SYS_REFCURSOR 只能通过OPEN 方法来打开和赋值

LOOP

fetch cursor into name –SYS_REFCURSOR 只能通过fetch into 来打开和遍历 exit when cursor%NOTFOUND; –SYS_REFCURSOR 中可使用三个状态属性: —%NOTFOUND( 未找到记录信息) %FOUND( 找到记录信息) —%ROWCOUNT( 然后当前游标所指向的行位置)

dbms_output.putline(name);

end LOOP;

rsCursor := cursor;

end test;
//
关于oracle存储过程的若干问题!!!!

1.在oracle中,数据表别名不能加as,如:
select a.appname from appinfo a;– 正确
select a.appname from appinfo as a;– 错误
但是挑出的表中的字段可以取别名

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.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
例子:
存储过程的定义与运行:

create or replace procedure mypro as Cursor months is select TABLE_NAME from user_tables t where t.TABLE_NAME like 'BSA_201612%';
   test varchar2(30) := 'test str';
   numb number :=1;
begin for mon in months loop dbms_output.put_line(test);
      --select count(*) from mon into numb;
      dbms_output.put_line(mon.TABLE_NAME);
  end loop; 
end mypro;

set serveroutput on;
exec mypro;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160791.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ftp文件下载工具,三个非常好使的ftp文件下载工具

    ftp文件下载工具,三个非常好使的ftp文件下载工具ftp文件下载工具是什么工具,可能有人会回答说不知道,因为一般只有从事网站管理的工作者会使用的多一点。但不是每个人生来就会的,所以刚开始肯定都会学习怎么使用。这篇文章就来告诉大家有哪些ftp文件下载工具吧。第一款:IIS7服务器管理工具说实话,这个工具算是比较好的管理工具了。里面的功能除了批量管理,还有很多别的功能,主要也是功能也比较全面,相信大多数使用的网站工作人员都比较熟悉了。它里面还能够定时上传下载、定时备份和主动更新。把你花在更新上的经历都省了。IIS7服务器管理工具除了在ftp上面有这么多的

    2022年6月5日
    72
  • python-列表(list)使用方法

    python-列表(list)使用方法这篇文章主要整理和记录python中列表(list)的使用方法,适合像我一样初学python的朋友们哟!List是一个有序的、可重复的数据类型,可以对其元素进行添加、删除、修改等操作。List支持

    2022年7月3日
    31
  • 打开VS2010提示:产品密钥框

    打开VS2010提示:产品密钥框                                          &n

    2022年6月5日
    43
  • SCSA 模拟题 知识点 (一)

    SCSA 模拟题 知识点 (一)SCSA模拟题知识点(一)1、CIA三原则基本是安全业界的主流共识,CIA原则是:完整性、可用性、机密性2、【AC】关于流量管理功能说法正确的是:流控可以基于用户进行流控3、【AC】数据包如果经过二层交换机转发后,这个数据包的源MAC不会发生变化,如果经过三层交换机路由转发后,源MAC会发生变化4、【SSL】私有用户同一时间只允许一台PC使用;共有用户允许多人使用,在同一时间内同时登录SSLVPN;私有用户可以在线修改登录密码、DKEY的PIN码、手机号码等5、【EDR】病毒..

    2022年6月20日
    33
  • Vue生成二维码_vue通过二维码分享

    Vue生成二维码_vue通过二维码分享转存vue生成二维码并下载1、下载插件npminstall–saveqrcodejs22、引入constQRCode=require(“qrcodejs2″)3、组件使用<template><divclass=”qr_code”><divstyle=”display:flex;align-items:center”>地址:<Inputid=”text”type=”te

    2022年9月28日
    4
  • 计算机专业选Java和Python哪个前景好点?[通俗易懂]

    计算机专业选Java和Python哪个前景好点?[通俗易懂]对于学习计算机专业的小伙伴,面对大二选课,开始陷入Java和python的纠结中,从以后的发展来看,这两个编程语言肯定是要通吃的,但前期的学习,可以有一个侧重点,说一下我自己的观点。应很多小伙伴的要求,我们从就业应用前景和学习难易度来分析一下:一、Java1、就业应用前景从目前的招聘量上来看,Java在编程语言中可以说是常胜将军,经常有各种新出的编程语言向它发起挑战,但是Jav…

    2022年7月8日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号