精华内容
下载资源
问答
  • 2018-10-24 14:49:43

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

    存储过程:
        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

     

    更多相关内容
  • 你是否为UI层繁杂的sql语句拼接烦恼,未服务器性能而头疼,这个存储过程方法或许为你打开一扇门
  • 在MySQL 入门教程中,我们能够看到很关于如何创建储存过程 和如何利用 IN 和 OUT 参数调用存储过程的示例。这些示例都很简单,能够很好的帮助你理解 MySQL 中创建带参数存储过程的语法。这些示例已在 MySQL 5.5 中...
  • MySQL 存储过程返回多个

    千次阅读 2021-01-26 05:13:08
    要开发返回多个值的存储过程,需要使用有INOUT或OUT参数存储过程。返回多个值的存储过程示例我们看看orderinfo 表表中数据以下存储过程接受点买家姓名,并返回各个状态的订单总数。--手动创建存储过程 ...

    MySQL  存储过程返回多个值

    在本教程中,您将学习如何编写/开发返回多个值的存储过程。

    MySQL存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。

    返回多个值的存储过程示例

    我们看看 orderinfo 表

    0eb5b4e24721ff62e272f737901da29c.png

    表中数据

    3ff486f57eab726f652c1cb9bf470cb9.png

    以下存储过程接受点买家姓名,并返回各个状态的订单总数。

    --手动创建存储过程 CheckOrderStatus

    usetest;DROP PROCEDURE IF EXISTSCountOrderByStatus;

    DELIMITER $$usetest$$CREATE PROCEDURECheckOrderStatus(IN cust_name VARCHAR(20),

    OUT 50Count INT,

    OUT 60Count INT,

    OUT 80Count INT,

    out 90Count INT)BEGIN

    --50Count

    SELECT count(*) INTO 50Count

    FROMorderinfoWHERE buyer_name =cust_nameAND order_status = ‘50‘;--60Count

    SELECT count(*) INTO 50Count

    FROMorderinfoWHERE buyer_name =cust_nameAND order_status = ‘60‘;--80Count

    SELECT count(*) INTO 50Count

    FROMorderinfoWHERE buyer_name =cust_nameAND order_status = ‘80‘;--90Count

    SELECT count(*) INTO 50Count

    FROMorderinfoWHERE buyer_name =cust_nameAND order_status = ‘90‘;END$$

    DELIMITER ;

    除IN参数之外,存储过程还需要4个额外的OUT参数:50Count, 50Count, 50Count 和 50Count。 在存储过程中,使用带有COUNT函数的SELECT语句根据订单状态获取相应的订单总数,并将其分配给相应的参数。

    要使用CountOrderByStatus存储过程,可以传递客户名称和四个用户定义的变量来获取输出值。

    执行存储过程后,使用SELECT语句输出变量值。

    call CheckOrderStatus(‘哪吒‘,@50Count,@60Count,@80Count,@90Count);SELECT @50Count,@60Count,@80Count,@90Count;

    b95de3e0c7cbd3eda7bf0f643f10977c.png

    从Python调用返回多个值的存储过程

    以下代码片段显示如何从Python程序中调用返回多个值的存储过程。

    importpymysqldefcallProcedure1(name):‘‘‘调用存储过程,

    输入参数:姓名,输出:统计状态数;

    使用输出参数方式‘‘‘count1= ‘‘count2= ‘‘count3= ‘‘count4= ‘‘db= pymysql.connect(‘127.0.0.1‘,‘adil‘,‘helloyyj‘,‘test‘,3306,charset=‘UTF8‘)

    cur=db.cursor()#调用 CheckOrderStatus 存储过程,传入4个参数

    cur.callproc(‘CheckOrderStatus‘, args=(name, count1, count2, count3,count4))#以 python 固定格式获取返回的值:@_存储过程名_0, 第一个返回值

    t = cur.execute(‘SELECT @_CheckOrderStatus_0,@_CheckOrderStatus_1,@_CheckOrderStatus_2,@_CheckOrderStatus_3;‘)print(t)

    data=cur.fetchall()print(data)ifdata :for rec indata:for i inrange(len(rec)):print(rec[i])

    cur.close()

    db.close()defcallProcedure12(name):‘‘‘调用存储过程,

    输入参数:编号,在线时间,输出:帐号,密码;

    使用select返回记录方式‘‘‘db= pymysql.connect(‘127.0.0.1‘, ‘adil‘, ‘helloyyj‘, ‘test1‘, 3306, charset=‘UTF8‘)

    cur=db.cursor()#调用 存储过程

    cur.execute(‘call CheckOrderStatus1("哪吒",@50Count,@60Count,@80Count,@90Count)‘)#执行 select 获取 参数返回值

    t1 = cur.execute(‘SELECT @50Count,@60Count,@80Count,@90Count;‘)print(t1)

    data=cur.fetchall()print(data)ifdata :for rec indata:for i inrange(len(rec)):print(rec[i])

    cur.close()

    db.close()if __name__==‘__main__‘:#callProcedure1(‘哪吒‘)

    callProcedure12(‘哪吒‘)

    遇到的问题:

    7f4e8834970603e05431300c6df5c989.png

    有上可知,程序执行成功了,但是有一个Warning。

    Warning: (3719, "‘utf8‘ is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.")

    result=self._query(query)#3719,“3719:‘utf8‘目前是该别名的别名 字符集UTF8MB3,将来会被UTF8MB4取代 发布。请考虑使用UTF8MB4以明确无误。

    所以新建了一个数据库 test1,字符集为:utf8mb4,如下。

    3223f38d2f7e34089e6efc48307de58b.png

    再次创建存储过程 CheckOrderStatus1,执行程序即可,不在产生警告。

    原文:https://www.cnblogs.com/BlueSkyyj/p/10419772.html

    展开全文
  • 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参数了。

    展开全文
  • 1.如果是命令窗口就用exec 存储过程名:1EXECprocedure;--procedure是存储过程名2.如果是 SQL窗口就用 begin ...3.如果是程序中调用就用 call 存储过程名 ,举栗子:hibernateDao.excuteSqlUpdate("{Call proc_s...

    1.如果是命令窗口就用exec 存储过程名:

    1

    EXEC  procedure;--procedure是存储过程名

    2.如果是  SQL窗口就用 begin  存储过程名  end;

    1

    2

    3

    begin

    procedure;--procedure是存储过程名

    end;

    3.如果是程序中调用就用 call 存储过程名 ,举个栗子:

    hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");//存储过程proc_stuInfo

    -----------------------------------------------------------------------------------------------------------------------------------

    4、带 in out 类型的参数执行  (oracle 存储过程 交换两个变量的值)

    先定义变量赋值后 再调用执行  例如:

    declare

    a varchar2(20):= '01';

    b varchar2(20):='02';

    -- a= '01' ;b='02';

    begin

    exchange(a ,b);

    --存储过程定义

    create or replace procedure exchange(a in out varchar2, b in out varchar2) is

    v_b varchar2(30);

    -- a varchar2(30);

    --b varchar2(30);

    begin

    v_b :=a;

    a := b;

    b := v_b;

    dbms_output.put_line('a:'||a||' b:'||b);

    end exchange;

    --执行

    declare

    a varchar2(20):= '01';

    b varchar2(20):='02';

    -- a= '01' ;b='02';

    begin

    exchange(a ,b);

    END;

    结果:

    9d7184497963c1a35d78cf50cb89ffb7.png

    展开全文
  • 存储过程(存储函数):指存储在数据库中供所有...存储过程的out参数可以实现返回值,所以存储过程可以替代存储函数。(存储函数是为了兼容低版本)  存储过程 out参数: --查询某个员工的姓名 薪水和职位 crea...
  • 可以用一“execute 存储过程参数”命令来调用存储过程。 优点及其缺点: 优势:如果某次操作需要执行次SQL,使用存储过程比单纯SQL语句执行要快。响应时间上来说有优势,可以给我们带来运行效率提高的好处,...
  • 带参数存储过程

    千次阅读 2019-08-12 10:53:43
    --输入参数in ,用于接收参数,在子程序内部,不能进行修改。默认的参数模式:in。 create or replace procedure increase_age(p_name IN tstudent.sname%TYPE) as mystudent tstudent%ROWTYPE; begin select...
  • MySQL 存储过程参数

    千次阅读 2021-01-18 19:14:57
    MySQL 存储过程参数MySQL存储过程参数简介在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。IN- 是默认模式。在存储过程中定义IN参数...
  • 平时做开发很少使用存储过程 本次工作中涉及批量插入且参数存储过程 所以又进行了一点学习 与简单的入门一样 在进行存储过程批量插入时 实例如下 create or replace procedure proc_result_insert(a in ...
  • Oracle调用有out参数存储过程

    千次阅读 2021-06-03 11:51:01
    当我们在oracle中写完一个存储过程,我们通常需要使用测试调用存储过程,调用测试之后,然后提交执行结果,就可以去数据库中执行sql,查看我们的存储过程执行的数据是否符合预期效果。 实际测试中,我们可能不希望...
  • MySQL存储过程参数多参数传递

    千次阅读 2018-10-03 09:35:54
    MySQL开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。 1,单参数 in DELIMITER $$USE dc3688$$CREATE PROCEDURE GetOfficeByCountry(IN country...
  • 存储过程条件判断(SQL组合查询)

    千次阅读 2021-01-18 20:10:12
    存储过程里想实现多个传入参数的判断,里面有7个传入参数条件.CREATEPROCEDUREsp_tbWasteSource_Search(@sddatetime,//开始日期@eddatetime,//结束日期@con1varchar(50),@con2varchar(30),@con3varchar(5),@con4var...
  • 在学生表(Student)中创建一个存储过程selectStudentsByClassName,该存储过程可以根据班级名称查询该班级所有学生的信息。 请在Hibernate中调用该存储过程,要求将调用代码封装在DAO中,并编写客户端代码进行测试。...
  • Oracle存储过程有返回参数

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

    千次阅读 2020-05-01 18:43:16
    1,有输入参数语法 语法: CREATE PROC[EDURE] 存储过程名 [{@参数 数据类型} [=默认值][,.....n]] AS SQL语句 [....n] 例:使用存储过程实现由用户输入学生的学号及课程名称,根据输 入的信息,显示相应的成绩,...
  • create procedure dealCall(in userId BIGINT,in ,queueCode BIGINT,out count_number BIGINT) begin declare count_number BIGINT default 0; END
  • SQLsever中执行带参数存储过程

    千次阅读 2020-06-30 09:56:46
    方法一:EXEC ZY.[IN].IN_NETWORK_UPLOAD_DETAIL_SP ‘参数1’,‘参数2’ 方法二:EXEC ZY.[IN].IN_NETWORK_UPLOAD_DETAIL_SP @参数名1 = 参数1,@参数名2 = 参数2(写出存储过程名,然后回车可自动生成)
  • 编写过程,此处@count 不输出 ...-- 需要传入两个参数,char 类型的name,int 类型的couont -- 最后select 数据输出@count declare @count int; exec pro_count '名字不是重点',@count output select @count as 'to
  • 其他同学提供的方式大部分都是Map接收调用mysql存储过程返回OUT结果集,要么...下面为各位踩坑的同学上代码描述如何处理调用mysqlinout的存储过程: @Options(statementType = StatementType.CALLABLE) @S...
  • mysql存储过程之返回多个

    万次阅读 2018-07-09 13:15:50
    要开发返回多个值的存储过程,需要使用有INOUT或OUT参数存储过程。咱们先来看一个orders表它的结构:mysql> desc orders; +----------------+-------------+------+-----+---------+-------+ | Field | ...
  • mysql存储过程中利用传入和传出参数获取查询记录输出方法。 查询结果有两种: 第一种查询结果是单条记录,可利用传出参数输出,也可直接输出。 第二种查询结果是条记录,不能用传出参数的方式输出,可直接输出。 ...
  • 昨天写存储过程,发现拼凑SQL要输出多个参数,但我之前一直没有拼凑SQL在存储里,百度了下,其实很简单,就记录下: 单个或多个参数输出,不是拼凑的SQL直接可以这样输出: SELECT @FStartTime = CONVERT(VAR...
  • CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=studentname FROM student ...7. 返回多个记录集的存储过程  SqlConnection...
  • SQL存储过程传入可以为空的参数

    千次阅读 2020-03-02 10:08:27
    SQL存储过程可以传入可以为空 的参数,写为@I int=null 的方式,传入参数时,既可以传入int类型的值,也可以传为null值
  • 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...
  • MySQL存储过程带参数

    千次阅读 2017-11-02 11:52:40
    本媛的SQLyog中有一名为MySQL的Database,使用use命令使用它。 接下来我们看看我现在的名为...从上面得出的结果来看本媛的数据库中暂时木有一个存储过程,当然,上面的两种查询方式取用任何一种都是可以的,只要查出

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,171,582
精华内容 468,632
关键字:

存储过程可以带多个参数