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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Xshell 7 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本”

    Xshell 7 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本”Xshell7忽然不能用,提示“”要继续使用此程序,您必须应用最新的更新或使用新版本“”解决办法:修改电脑的系统时间。右下角日期-右键“调整日期/时间(A)”-手动设置日期和时间-将日期调整到2017年即可。之前Xshell6和Xshell5也会包这样的错误,是因为xshell比较傻叉,需要你强制更新到最近版本否则就不能使用。也解决办法就是找到xshell的解决目录,用UE打开nslicense.dll文件:xshell6和xshell5解决的具体步骤步骤1:下载U…

  • 数电——超前进位加法器

    数电——超前进位加法器一、串行(行波)进位加法器进行两个4bit的二进制数相加,就要用到4个全加器。那么在进行加法运算时,首先准备好的是1号全加器的3个input。而2、3、4号全加器的Cin全部来自前一个全加器的Cou

  • 赚一个亿真的不难,不信你看下面代码

    赚一个亿真的不难,不信你看下面代码privatevoidComputeActionPerformed(java.awt.event.ActionEventevt){//TODOaddyourhandlingcodehere:if(Salary.getText().isEmpty()||Aim.getText().isEmpty()||Saving.getText().isEmpty()){..

  • 补码运算加减乘除原理是什么_计算机组成原理补码乘法运算

    补码运算加减乘除原理是什么_计算机组成原理补码乘法运算首先我们来看为什么要使用补码运算法:         因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减.(真值的概念在本文最开头).但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单.计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法.我们知道,根据运算法则减去一个正数等于加上一个负数…

  • Java中的相除(/)和取余(%)

    Java中的相除(/)和取余(%)让我们先看一段代码:publicclassDivision_remainder{publicstaticvoidmain(String[]args){inta=13/5;intb=13%5;intc=5/13;intd=5%13;inte…

  • 6种不同画法画平行线_平行线的画法_中小学试题|家庭教育题库|辅导习题「中国戏曲学院附属中等戏曲学校」…

    6种不同画法画平行线_平行线的画法_中小学试题|家庭教育题库|辅导习题「中国戏曲学院附属中等戏曲学校」…平行线怎么画第五章《数学活动1》—-你有几种画平行线的方法【活动理念】通过让学生积极参与此次活动,获得成功的体验,感受活动课的乐趣.通过观察、操作、推理归纳,让学生进一步知道相交线、平行线以及垂线的概念,利用平行线的判定解决一些实际问题,利用平移可以绘制一些优美的图案等.【活动目标】一、知识与技能1、两直线平行的条件,掌握两种以上最快捷的画平行线的方法.2、进一步理解相交线、平行线以及垂线的概…

发表回复

您的电子邮箱地址不会被公开。

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