Oracle存储过程基本写法[通俗易懂]

Oracle存储过程基本写法[通俗易懂]oracle存储过程的基本语法1.基本结构 CREATEORREPLACEPROCEDURE存储过程名字(   参数1INNUMBER,   参数2INNUMBER)IS变量1INTEGER:=0;变量2DATE;BEGINEND存储过程名字2.SELECTINTOSTATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有…

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

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单步调试

 

简单实例,通过DBMS_OUTPUT来看结果

CREATE OR REPLACE PROCEDURE bb (lic_para IN VARCHAR2,out_para OUT VARCHAR2)
AS
   temp   VARCHAR2 (100);
BEGIN
   SELECT lic_no
     INTO temp
     FROM t_vehicle_info
    WHERE lic_no = lic_para;
    out_para:=temp;
    DBMS_OUTPUT.put_line (out_para);
END bb;

下面是调用:

begin

  — Call the procedure

  bb(lic_para => :lic_para,

     out_para => :out_para);

end;

实例:

CREATE OR REPLACE PROCEDURE 要创建的存储过程名称 (
入参a IN VARCHAR2,
出参b out VARCHAR2

IS 变量c VARCHAR2 (2000) ; 
变量d NUMBER (10) ;
异常变量e EXCEPTION ;
BEGIN

IF 入参a IS NULL THEN
raise 异常e ;
END IF ;// 跳到异常处理 
FOR cc IN (select语句) LOOP // 执行sql 
v_sql := ‘select语句’ ; 
EXECUTE IMMEDIATE v_sql INTO v ;// 把查询的结果放到v中; 
// sql查询,并放到v2中 
SELECT
COUNT (*) INTO v2..; // 进行相关判断
IF v2 = 1 THEN
update、insert等操作 ;
END IF ;
END loop ; 
COMMIT ; 
MSG := ‘success’ ; 
// 异常处理
 EXCEPTION
WHEN NECE THEN
MSG := ‘入参a不能为空’ ;
WHEN OTHERS THEN
MSG := sqlerrm ;
 ROLLBACK ;
END 要创建的存储过程名称 ;

原文转载:https://www.cnblogs.com/chinafine/articles/1776085.html

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

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

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

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

(0)


相关推荐

  • 卸载LuDaShi时弹出“正在运行”“已被打开”的一种解决方法

    卸载LuDaShi时弹出“正在运行”“已被打开”的一种解决方法找软件资源的时候偷懒下载了三流网站的东西,结果被LDS(不知道是真LuDaShi还是山寨LuDaShi)缠上了。斗智斗勇一晚上,有了以下俩想法。(小白乱说不一定对)1、LDSGameMaster文件夹下,无法删除的子项疑似会在被用户选中执行删除命令时调用自身,以逃避卸载。笔者第一次选中LDSGameMaster时删除中断,显示有程序调用该文件夹,打开任务管理器后并未找到任何在运行中的LDS进程。一级一级打开子文件夹,发现最后不能被删除的子项,调用者是Win资源管理器——搁这儿搁这儿呢!于是试着改了下这个

  • java etl 简单实例_东方通ETL开发实例[通俗易懂]

    java etl 简单实例_东方通ETL开发实例[通俗易懂]东方通ETL开发实例下面通过一个简单的“OracleCDC增量抽取”实例,带大家感受一下TIETL的开发思路和强大的数据处理能力。功能需求:同一数据库(localhost_etl)下,现有cdc_source和cdc_target两张表如下:表cdc_source表cdc_target现表cdc_source的增量(增、删、改)需同步到cdc_target中TIETL环境下开发思路:类似于jav…

  • BetterIntelliJ 2021.4.4 激活码_通用破解码

    BetterIntelliJ 2021.4.4 激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • QQ农场开挂_农场游戏源码

    QQ农场开挂_农场游戏源码  QQ空间\校友农场外挂源代码12009年08月18日星期二11:41{///////////////////////////////////////////////////////////////////////////////                           声明//本代码不针对任何团体和个人,只为学习\交流\促进游戏的发展而发布//…

  • js unit8array和java变量之间的关系

    js unit8array和java变量之间的关系unit8array如何同java进行交互最近一个项目遇到了一个二维码转换的问题,厂家给的demo只有js的转换方式,其中用到了Unit8,由于实际应用场景,转换应该由后端java代码进行实现,这里记录一下实现方式。JS对字符串操作的时候,有时候我们会用到UNIT8ARRAY,例如varbinary_string=window.atob(str);vararray=new…

  • 项目开发中编写的文档

    软件开发中文档的编写是一个不可缺少的环节,常见的如《需求分析》、《概要分析》、《数据库设计》等。在“软件人”的阵营里向来存在两种观点,注重文档还是关心代码。一直争论多少年了,好像都没有一个真正的定乱。

    2021年12月21日

发表回复

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

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