精华内容
下载资源
问答
  • spring data Jpa 调用存储过程返回多个out参数 标注Entity @Entity @Table(name="SY_USER") @NamedStoredProcedureQueries({ @NamedStoredProcedureQuery(name="pd_ka_strreportscanx",...

    spring data Jpa 调用存储过程返回多个out参数

    标注Entity

    @Entity
    @Table(name="SY_USER")
    @NamedStoredProcedureQueries({
        @NamedStoredProcedureQuery(name="pd_ka_strreportscanx",procedureName="PD_KA_STRREPORTSCANX"
            ,parameters={@StoredProcedureParameter(mode=ParameterMode.IN,name="i_send_no",type=String.class)
        ,@StoredProcedureParameter(mode=ParameterMode.IN,name="i_send_qty",type=String.class),
            @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_str_auto",type=String.class),
            @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_test_auto",type=String.class),
            @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_return",type=String.class)
        })
    })
    public class Users{
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="USER_NO")
        private String userNo;//主键
        @Column(name="USER_ID")
        private String userId;//用户id
        @Column(name="PASSWORD")
        private String password;//用户密码
        @Column(name="USER_DESC")
        private String userDesc;//用户名称
        @Column(name="FACTORY")
        private String factory;//用户厂别
        @Column(name="INV_FLAG")
        private String invFlag;//是否停用
    
    
        public String getUserDesc() {
            return userDesc;
        }
        public void setUserDesc(String userDesc) {
            this.userDesc = userDesc;
        }
        public String getFactory() {
            return factory;
        }
        public void setFactory(String factory) {
            this.factory = factory;
        }
        public String getInvFlag() {
            return invFlag;
        }
        public void setInvFlag(String invFlag) {
            this.invFlag = invFlag;
        }
        public String getUserNo() {
            return userNo;
        }
        public void setUserNo(String userNo) {
            this.userNo = userNo;
        }
        public String getUserId() {
            return userId;
        }
        public void setUserId(String userId) {
            this.userId = userId;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    
    
    }
    

    随便找一个entity就可以了如果有多个存储过程,可以用@NamedStoredProcedureQueries就像我上面一样.如果只有1个存储过程,可以用@NamedStoredProcedureQuery代替@NamedStoredProcedureQueries.

    @StoredProcedureParameter 是用来标注存储过程的参数的..没啥特别的.只是要注意name和数据库里的参数名字一样.

    @NamedStoredProcedureQuery里面procedureName 也要与数据库中存储过程的名字一样.而name可以自己取值,与数据库没有关系

    调用存储过程

    public String saveQuarantine(HttpServletRequest request,String send_no,String send_qty) throws Exception{
    
        String o_return=null;
        String o_str_auto=null;
        String o_test_auto=null;
        try {
        /*  o_return=usersService.saveQuarantine(send_no, send_qty);*/
            //调用存储过程pd_ka_strreportscanx(此名称并不是数据库中名称由Users类中定义的)
             StoredProcedureQuery store = this.entityManager.createNamedStoredProcedureQuery("pd_ka_strreportscanx");
              store.setParameter("i_send_no", send_no);  
              store.setParameter("i_send_qty", send_qty);  
              store.execute();
               o_str_auto=(String) store.getOutputParameterValue("o_str_auto");
               o_test_auto=(String) store.getOutputParameterValue("o_test_auto");
              o_return=(String) store.getOutputParameterValue("o_return");
              System.out.println(""+o_return);
        } catch (Exception e) {
            request.setAttribute(LoggerUtils.LOGGER_RETURN,"保存"+send_no+"待檢材料收貨失败!");
        }
    
        if(o_return!=null){
            request.setAttribute(LoggerUtils.LOGGER_RETURN,"待檢材料收貨保存成功,正式單號:"+o_str_auto+"測試單號:"+o_test_auto);
            o_return="待檢材料收貨保存成功,正式單號:"+o_str_auto+"測試單號:"+o_test_auto;
        }
            return o_return;
        }
    
    }

    通过getOutputParameterValue就可以获取你需要的output参数了。

    展开全文
  • 存储过程(存储函数):指存储在数据库中供所有...存储过程的out参数可以实现返回值,所以存储过程可以替代存储函数。(存储函数是为了兼容低版本)  存储过程 out参数: --查询某个员工的姓名 薪水和职位 crea...

    存储过程(存储函数):指存储在数据库中供所有用户程序调用的子程序(PL/SQL程序)。
    存储过程没有返回值,存储函数有返回值(return语句,要有返回值的类型)。
    区别:存储函数可以有返回值,而存储过程没有返回值。

    存储过程的out参数也可以实现返回值,所以存储过程可以替代存储函数。(存储函数是为了兼容低版本) 

    存储过程 out参数:

    --查询某个员工的姓名 薪水和职位
    
    create or replace procedure queryEmpInformation(eno in number,
                                                    pename out varchar2,
                                                    psal   out number,
                                                    pjob   out varchar2)  --in表示输入参数,out表示输出参数
    is
    begin
      
       select ename,sal,job into pename,psal,pjob from emp where empno=eno;                                             
    
    end queryEmpInformation;
    /

    调用存储过程:

    begin
      queryEmpInformation(eno => 7839,
                          pename => :pename,
                          psal   => :psal,
                          pjob   => :pjob);   --  =>也表示赋值的意思
    
    end;

    通过PL/SQL Developer工具调用存储过程:

     

     

    展开全文
  • Oracle存储过程有返回参数

    千次阅读 2015-12-24 17:15:11
    1、基本语法 ...创建一个存储过程的基本语句如下: CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)] {AS|IS} [说明部分:参数定义、变量定义、游标定义] BEGIN  可

    1、基本语法

    创建存储过程,需要有CREATEPROCEDURE或CREATE ANY PROCEDURE的系统权限。该权限可由系统管理员授予。创建一个存储过程的基本语句如下:

    CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]

    {AS|IS}

    [说明部分:参数定义、变量定义、游标定义]

    BEGIN

     可执行部分

    [EXCEPTION 错误处理部分]

    END [过程名];

    其中:

    可选关键字OR REPLACE 表示如果存储过程已经存在,则用新的存储过程覆盖,通常用于存储过程的重建。

     参数部分用于定义多个参数(如果没有参数,就可以省略)。参数有三种形式:IN、OUT和IN OUT;如果没有指明参数的形式,则默认为IN。

    IN 定义一个输入参数变量,用于传递参数给存储过程

    OUT 定义一个输出参数变量,用于从存储过程获取数据

    IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能


    例1,创建带输入输出参数的存储过程:

    create or replace procedure test_procedure(a in number, x out varchar2) is
    begin
      if a >= 90 then
        begin
          x := 'A';
        end;
      end if;
      if a < 90 then
        begin
          x := 'B';
        end;
      end if;
      if a < 80 then
        begin
          x := 'C';
        end;
      end if;
      if a < 70 then
        begin
          x := 'D';
        end;
      end if;
      if a < 60 then
        begin
          x := 'E';
        end;
      end if;
    end test_procedure;

    执行结果:


    例2、创建 参数为 IN OUT  的存储过程

     

    create table EMP (EMPNO number , ENAME varchar2(32) );

    insert into EMP (EMPNO ,ENAME) values (10,'张三');

    insert into EMP (EMPNO ,ENAME) values (20,'小马');

    insert into EMP (EMPNO ,ENAME) values (30,'小米');

    insert into EMP (EMPNO ,ENAME) values (40,'小明');


    CREATE OR REPLACE FUNCTION GET_EMP_NAME(P_EMPNO NUMBER DEFAULT 10)
      RETURN VARCHAR2 AS
      V_ENAME VARCHAR2(32);
    BEGIN
      SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = P_EMPNO;
      RETURN(V_ENAME);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
       -- DBMS_OUTPUT.PUT_LINE('没有该编号雇员!');
        RETURN('没有该编号雇员!');
      WHEN TOO_MANY_ROWS THEN
       -- DBMS_OUTPUT.PUT_LINE('有重复雇员编号!');
        RETURN('有重复雇员编号!');
      WHEN OTHERS THEN
      ---  DBMS_OUTPUT.PUT_LINE('发生其他错误!');
        RETURN('发生其他错误!');
    END;

    执行结果:


    展开全文
  • 存储过程(无参,多个输入参数多个输出参数存储过程:  1、减少编译次数  2、简化操作  3、减少了变异次数减少了和数据库的链接次数,提高效率  关于存储过程的方法:  1、删除存储过程  DROP ...

                   存储过程(无参,多个输入参数,多个输出参数)

    存储过程:
        1、减少编译次数
        2、简化操作
        3、减少了变异次数减少了和数据库的链接次数,提高效率 

    关于存储过程的方法:
         1、删除存储过程
             DROP PROCEDURE 存储过程的名称;
         2、查看存储过程信息
             show create procedure 存储过程名称;
         3、没有存储过程的修改

    创建语法:

    		CREATE PROCEDURE 存储过程名称(参数列表)
    		BEGIN
    		 方法体(存储过程体)一组方法语句;
    		END

    ⭐⭐⭐⭐注意:参数列表包括三部分
            1、参数模式 参数名 参数类型
            eg:  IN stuname varchar(20)
                参数模式
                IN :   该参数可以作为输入,也就是需要调用方传入值
                OUT:   该参数作为输出,也就是该参数可以作为返回值
                INOUT: 既可以作为输入参数,也可以作为输出参数
            2、如果存储过程提仅仅只有一句话,那么BEGIN END 可以省略
            3、存储过程中的每一条sql语句的结尾都必须加封号,需要申明结尾符号 DELIMITER 重新设置

    以下在创建的过程中使用DELIMITER $开始,DELIMITER ;结束,是因为mysql是以;结束的,此处创建存储过程的时候需要指定结尾符号为$,整个存储过程执行完成后,再还原为mysql的结束符;即可

    一、空参存储过程

    DELIMITER $
    		    CREATE PROCEDURE test1()
    		BEGIN
    			INSERT INTO admin(username,`password`) VALUES ('JOHN1','000001');
    			INSERT INTO admin(username,`password`) VALUES ('JOHN2','000002');
    			INSERT INTO admin(username,`password`) VALUES ('JOHN3','000003');
    			INSERT INTO admin(username,`password`) VALUES ('JOHN4','000004');
    			INSERT INTO admin(username,`password`) VALUES ('JOHN5','000005');
    		END $

    调用:CALL test1();

    二、入参存储过程(此处直接举例有多个入参的存储过程的写法)
            # 示例,查询是否登陆成功

    DELIMITER $
    		CREATE PROCEDURE testParams(IN username varchar(20),IN password varchar(20))
    		BEGIN
    			DECLARE RESULT VARCHAR(20) DEFAULT '';#申明并初始化
    			select COUNT(1) INTO RESULT #赋值将统计到的count(1) 赋值给RESULT结果 
    			from  admin
    			where admin.username=username #如果参数名相同的话指明参数是那个表的字段即可
    				and admin.password=password;
    		END $
    		DELIMITER ;

    调用:call testParams('11','22');

    三、多个出参的存储过程(此处直接举例有多个出餐的存储过程的写法)
            #根据女神名,查询男神名和魅力值

    DELIMITER $
    		CREATE PROCEDURE myp7(IN beautyName varchar(20),OUT boyName VARCHAR(20),OUT userCP varchar(20))
    		BEGIN
    			SELECT bo.boyName,bo.userCP INTO boyName,userCP #此处赋值的时候多个直接INTO为对应位置的出参对象即可
    			FROM boys bo
    				INNER JOIN beauty b on bo.id=b.boyfriend_id
    			WHERE
    				b.name=beautyName;
    		END $
    		DELIMITER ;

    调用:

    CALL myp7('小昭',@boyName,@userCP); 
    #此处存储过程的两个入参(也即出参)用@符号定义即可,也可以先定义好传入到里面
    SELECT @boyName AS boyName,@userCP as userCP #查询存储过程运行的结果

    四、创建带有INOUT的存储过程

    #案例 传入a,b 最终a,b翻倍,并返回

    		DELIMITER $
    			CREATE PROCEDURE ccgc(INOUT a int,INOUT b int)
    			BEGIN
    				SET a=a*2;
    				SET b=b*2;
    			END $
    		DELIMITER ;
    		

    调用:

    ###此处需要提前定义参数值,类似于java的入参,
    		SET @m=10;
    		SET @n=30;
    		call ccgc(@m,@n);
    		#然后调用,并打印输出
    		select @m,@n

     

    展开全文
  • 存储过程 IN 多个参数解决

    千次阅读 2010-01-05 17:05:00
    今天写存储过程的时候,遇到了传入多个参数,不能用in匹配的问题。例如:传入参数: b = a,b,c;pl/sql语句: select * from table where var in ( + b + );不能匹配,因为pl/sql把b当做一个完整的字符串, select...
  • create procedure dealCall(in userId BIGINT,in ,queueCode BIGINT,out count_number BIGINT) begin declare count_number BIGINT default 0; END
  • 昨天写存储过程,发现拼凑SQL要输出多个参数,但我之前一直没有拼凑SQL在存储里,百度了下,其实很简单,就记录下: 单个或多个参数输出,不是拼凑的SQL直接可以这样输出: SELECT @FStartTime = CONVERT(VAR...
  • -- 存错过程测试 传入map(多参数) 返回结果集 --> </resultMap> <select id="procedureTest2" statementType="CALLABLE" parameterType="java.util.Map"> <![CDATA[ CALL ...
  • 其他同学提供的方式大部分都是Map接收调用mysql存储过程返回OUT结果集,要么...下面为各位踩坑的同学上代码描述如何处理调用mysqlinout的存储过程: @Options(statementType = StatementType.CALLABLE) @S...
  • 可以用一“execute 存储过程参数”命令来调用存储过程。 优点及其缺点: 优势:如果某次操作需要执行次SQL,使用存储过程比单纯SQL语句执行要快。响应时间上来说有优势,可以给我们带来运行效率提高的好处,...
  • Oracle存储过程及举例(几种参数情况的存储过程

    万次阅读 多人点赞 2017-05-06 22:22:50
    Oracle存储过程及举例(几种参数情况的存储过程
  • 存储过程: CREATE OR REPLACE PROCEDURE testABC(in1 IN varchar2,in2 IN VARCHAR2, out1 OUT varchar2,out2 OUT VARCHAR2) IS BEGIN INSERT INTO t_test VALUES(100,in1,sysdate,in2); SELECT user_name,...
  • MySQL存储过程参数多参数传递

    千次阅读 2018-10-03 09:35:54
    MySQL开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。 1,单参数 in DELIMITER $$USE dc3688$$CREATE PROCEDURE GetOfficeByCountry(IN country...
  • mysql存储过程多个参数传入的方法

    千次阅读 2015-03-23 16:04:00
    存储过程中怎么把参数(1,2,3)传进去? 写法如下: CREATE PROCEDURE `P_parameter` (id_ VARCHAR (50)) BEGIN SELECT *FROM AWHEREFIND_IN_SET(id, id_) ; END call P_parameter('1,2...
  • 存储过程  与where in(参数) 方法一:拚sql,调用esec执行sql  如 exec('delete from xxx where id in('+@id+')')   方法二:使用charindex遍历  如 deletefrom xxx wherecharindex(','+id+',', ','...
  • mysql存储过程之返回多个

    万次阅读 2018-07-09 13:15:50
    要开发返回多个值的存储过程,需要使用有INOUT或OUT参数存储过程。咱们先来看一个orders表它的结构:mysql&gt; desc orders; +----------------+-------------+------+-----+---------+-------+ | Field | ...
  • 有的时候我们希望利用job调用参数存储过程,那么下面就利用一测试来介绍job如何调用参数存储过程。创建测试表:create table aaa(name varchar2(10));创建测试存储create procedure mytest (name ...
  • MySQL存储过程带参数

    千次阅读 2017-11-02 11:52:40
    本媛的SQLyog中有一名为MySQL的Database,使用use命令使用它。 接下来我们看看我现在的名为...从上面得出的结果来看本媛的数据库中暂时木有一个存储过程,当然,上面的两种查询方式取用任何一种都是可以的,只要查出
  • 平时做开发很少使用存储过程 本次工作中涉及批量插入且参数存储过程 所以又进行了一点学习 与简单的入门一样 在进行存储过程批量插入时 实例如下 create or replace procedure proc_result_insert(a in ...
  • 最近在做开发过程中碰到这么一纠结的问题,需要同时插入N条数据,不想在程序里控制,但是SQL Sever又不支持数组参数.所以只能用变通的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"3500320083208#...
  • 我想用mysql存储过程获取外键数据,然后通过out输出来。结果发现就能获取一条记录,不知道怎么去获取条。麻烦各位帮忙看下。 存储过程代码: CREATE PROCEDURE empCusState( in riqi date,out rname varchar...
  • 存储过程中从结果集给多个参数赋值的小办法  今天在写存储过程的时候需要从数据库查询一条结果并根据结果为几个参数赋值。以前很少遇到这种情况,偶尔返回对多条的结果集也是用游标进行操作,对只返回一条结果的...
  • 若要为参数设置多值属性,则在“报表参数”对话框上选择“多值”选项。可以将任何参数类型设置为多值(除布尔值之外...不过,如果要将多个参数值传回查询,则必须满足下列要求: 数据源必须为 SQL Server、Oracle 或 A
  • 总的来说,参数可以是常量、变量和表达式等。 Oracle有三种参数模式: IN OUT IN OUT IN参数 该类参数值由调用者传入,并且只能够被存储过程读取。这种模式的参数是最常用的,也是默认的参数模式。 示例:创建一...
  • 【Oracle】带参数存储过程

    千次阅读 2018-07-23 21:42:37
    1、创建存储过程 create procedure updatedemo (ageparam IN number) as begin update demo set age = ageparam; commit;...3、为存储过程设置参数的默认值 创建存储过程 create or replac...
  • MySQL有关带参数存储过程

    千次阅读 2018-02-23 17:49:09
    前言小案例: 输入输出参数:记录MYSQL存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 BEGIN …. END 存储过程开始和结束符号 ...
  • Oracle带参数存储过程

    千次阅读 2017-11-22 11:44:21
    --带参数存储过程:给指定的员工涨100,并且打印涨前和涨后的薪水 /* 如何调用: begin raisesalay(7839); raisesalay(7566); commit; end; / */ create or replace procedure raises
  • 1,有输入参数语法 语法: CREATE PROC[EDURE] 存储过程名 [{@参数 数据类型} [=默认值][,.....n]] AS SQL语句 [....n] 例:使用存储过程实现由用户输入学生的学号及课程名称,根据输 入的信息,显示相应的成绩,...
  • MySQL存储过程输入参数)实例

    万次阅读 2016-09-28 17:03:36
    第一次写存储过程,参考了《SQL完全手册》,写了一涉及到三张表的存储过程,简单实现了往一张表插入数据,修改另外两张表的功能。MySQL的语法和其他数据库语法有区别,写的过程需要特别注意。还有就是";"的问题,...
  • ADO教程(执行带参数存储过程

    千次阅读 2017-05-25 16:07:42
    由于最近项目上要使用ADO访问数据库,而网上又没有非常完整的帖子,干脆摸着石头过河来总结一ADO的使用;首先不得不说ADO的使用率并不是很高 1.ADO是微软提供的访问各种数据库的统一接口,是对底层的COM技术OLE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,021,519
精华内容 408,607
关键字:

存储过程可以带多个参数