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

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

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

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


相关推荐

  • Kong网关插件使用「建议收藏」

    Kong网关插件使用「建议收藏」转载李亚飞大佬的文章:https://www.lyafei.com/授权验证在接口请求中权限验证是一个恒久不变的话题,Kong自带了6种加密方式先创建一个BasicAuth,直接确认即可此时页面访问http://dev.lyafei.com:8000/dev会弹出登录框,让你输入用户名密码,若取消则会返回{“message”:“Unauthorized”},若输入用户名和密码后确认会返回{“message”:“Invalidauthenticationcredential.

    2022年9月11日
    2
  • 初识缓存以及ehcache初体验「建议收藏」

    初识缓存以及ehcache初体验

    2022年1月19日
    43
  • Activiti工作流框架学习笔记(一)「建议收藏」

    Activiti工作流框架学习笔记(一)「建议收藏」工作流的概念先看下面两张图:对以上两张图进行说明:假设这两张图就是华谊兄弟的请假流程图图的组成部分:人物:范冰冰、冯小刚、王中军事件(动作):请假、批准、不批准通过以上分析我们就可以抽象成:接下来给出工作流的书面化概念:工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、

    2022年10月6日
    1
  • 解决mysql不是内部或外部命令

    解决mysql不是内部或外部命令

    2021年9月19日
    45
  • java遍历数组取出最大值_求数组20个数的平均值

    java遍历数组取出最大值_求数组20个数的平均值求平均值与最大值实现前需要懂得如何获取数组长度实现数组遍历例如:int[]array={2,3,6,8,18};for(inti=0;i<array.length;i++){System.out.print(array[i]+”,”);}输出结果:2,3,6,8,18求最大值时则采用擂台制现默认一个数为最大值(max)使用循环遍历数组中的每个数进行两两比较从而得出最大值。实现代码importjav

    2022年9月19日
    1
  • OS X 键盘快捷键

    OS X 键盘快捷键

    2021年8月28日
    61

发表回复

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

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