打开plsql,在packages文件夹里新建存储过程

在sql窗口中运行如下语句

create or replace package SY_USER_PKG1 is

TYPE MYCURSOR IS REF CURSOR;

--自己写的测试存储过程
PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
);
end SY_USER_PKG1;

则会在packages文件夹下出现这个存储过程标记,就相当于java中的一个接口吧!

然后:再写具体的存储过程,就相当于java中的接口实现类吧

create or replace package body SY_USER_PKG1 is

PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
)
IS
v_userCount NUMBER;
BEGIN

IF v_type=1 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=1 THEN
v_err_code:=1;
else
v_err_code:=0;
END IF;
end if;

IF v_type=2 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=0 THEN
v_err_code:=2;
else
v_err_code:=0;
END IF;
END IF;

end T_CHCODE1;
end SY_USER_PKG1;

这段代码按F8运行后,在packages bodyies文件夹下会出现这个

这就是一个完整的存储过程了,有接口,有实现

下面让我们来测试一下

点击右键,会有测试选项

填入参数,如上图,F8运行,结果如下图

可以看到拿到了返回的结果值 0

然后就可以在java代码中调用了,在mapper配置文件中是这样的:

<insert id="chcode" parameterType="java.util.Map" statementType="CALLABLE">
<![CDATA[
{call SY_USER_PKG1.T_CHCODE1(

#{v_phone,mode=IN,jdbcType=NVARCHAR},
#{v_userType,mode=IN,jdbcType=NUMERIC},
#{v_type,mode=IN,jdbcType=NUMERIC},
#{v_err_code,mode=OUT,jdbcType=NUMERIC}
)
}

]]>

</insert>

在service实现类中直接调用

oCode就是拿到的返回值了。

至此,一个调用存储过程的流程结束了!

一个oracle存储过程的更多相关文章

  1. 记一个Oracle存储过程错误

    下面一个存储过程是创建一个job,在5秒后更新一个表: create or replace PROCEDURE P_TEST AS jobno number; BEGIN dbms_job.submi ...

  2. 测试第一个Oracle存储过程

    存储过程语句 //简单存储过程的例子 //每调用一次打印一次hello world create or replace procedure sayhelloworld as begin dbms_ou ...

  3. 写的一个ORACLE存储过程小练习

    CREATE OR REPLACE PROCEDURE PRO_1112(O_NOTE OUT NUMBER,O_RESULT OUT VARCHAR2)ASV_NO NUMBER(20);V_NOT ...

  4. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  5. .NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  6. NET Core中使用Dapper操作Oracle存储过程

    .NET Core中使用Dapper操作Oracle存储过程最佳实践   为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...

  7. JDBC调用oracle 存储过程

    1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...

  8. Oracle 存储过程调用返回游标的另一个存储过程。

    一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...

  9. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

随机推荐

  1. poj 3232 Accelerator

    http://poj.org/problem?id=3232 题意:有一个含有n辆车的车队,当前距离终点的距离已知,有m个加速器,每个加速器在一个时刻只能给一辆车用,一旦使用就会使得其速度由1变成k, ...

  2. Thinking in C++: 第1章 为什么C++会成功

    本文内容摘抄自C++经典书籍:<Thinking in C++>   操作概念:OOP程序像什么 我们已经知道,用C 语言编写的过程程序就是一些数据定义和函数调用.要理解这种程序的含义,程 ...

  3. [译] 新手和老手都将受益的JavaScript小技巧

    这篇文章会分享一些鲜为人知但却很强大的JavaScript技巧, 各个级别的JavaScript开发者都会从中受益.   1. 用数组的length属性清空数组   我们知道在JS中对象类型是按引用传 ...

  4. Raid1源代码分析--一些补充

    Raid1的源码的读.写.同步,在本系列博客中都已经分析完成.除了barrier机制要专门拿出来分析(下一篇会写)以外,有一些问题值得思考和注意,分析如下. 1.freeze_array是如何做的? ...

  5. JS浏览器对象-计时器

    setInterval用法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  6. css文本样式

    1. body{ color:aqua; /*可继承的颜色*/ text-align: center; /*文本对齐方式*/ } 2.缩进: index.html <!DOCTYPE html& ...

  7. Nginx各个配置块功能详解

    Nginx学习笔记-入门篇 nginx初探 ginx服务器是轻量级web服务器中广受好评的一款产品,常用功能有HTTP代理与反向代理(目前已支持七层与四层代理),负载均衡,web缓存. nginx配置 ...

  8. 流媒体开发之-腾讯体育NBA视频点播解析

    在前面解析赛事和排名,在这里解析点播视频,选取的是腾讯体育链接里面的点播. 首先还是先封装一个保存点播视频的相关信息的类 package com.jwzhangjie.model; import ja ...

  9. Javascript:数组和字符串的相互转化

    中午吃饭的时候,和室友讨论前端的问题,然后一个有趣的问题被抛出来: javascript用什么方法可以把“hello world”位置反转输出,即输出:"dlrow olleh"? ...

  10. Ubuntu16.04下部署 nginx+uwsgi+django1.9.7(虚拟环境pyenv+virtualenv)

    由于用的新版本系统,和旧的稍有差别,在网上搜了很多相关资料,搞了三天终于搞好在Ubuntu16.04下的部署,接下来就详细写写步骤以及其中遇到的问题.前提是安装有虚拟环境pyenv+virtualen ...