mysql存储过程能不能直接执行拼接的sql语句

当然可以,就是在mysql存储过程中使用动态sql,就可以拼接sql,然后执行了。给你复制一段,如果不满意,自己搜索 mysql 存储过程 动态sql 就可以了 DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE PROCEDURE SearchByDoctor( IN DoctorId VARCHAR(50), IN deptId VARCHAR(50), IN beginDate...
mysql存储过程能不能直接执行拼接的sql语句
当然可以,就是在mysql存储过程中使用动态sql,就可以拼接sql,然后执行了。

给你复制一段,如果不满意,自己搜索 mysql 存储过程 动态sql 就可以了

DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE PROCEDURE SearchByDoctor( IN DoctorId VARCHAR(50), IN deptId VARCHAR(50), IN beginDate VARCHAR(20), IN endDate VARCHAR(20), IN StandDeptId VARCHAR(50), IN OperationFlag VARCHAR(50), IN SsczflId VARCHAR(50), OUT OperNum INT, OUT AvgDangerIndex DOUBLE, OUT OperGrCase INT) BEGINDECLARE cal1 VARCHAR(800); DECLARE cal2 VARCHAR(800);SET cal1="SELECT COUNT(1),AVG(DANGER_INDEX) INTO @para1,@para2 FROM yw_ssxxb WHERE 1=1 "; SET cal2="SELECT COUNT(1) INTO @para3 FROM gr_grbw WHERE OPE_RELID IN (SELECT RELID FROM yw_ssxxb WHERE 1=1"; #拼接医生id SET cal1=CONCAT(cal1," ","AND OPEDOC_ID = ","'",DoctorId,"'"); SET cal2=CONCAT(cal2," ","AND OPEDOC_ID = ","'",DoctorId,"'"); #拼接科室idIF deptId <>'' THEN SET cal1=CONCAT(cal1,"AND DEPT_ID =","'",deptId,"'"); END IF; #拼接开始结束日期 IF beginDate<>'' AND endDate <>'' THEN SET cal1=CONCAT(cal1," ","AND OPER_AT BETWEEN ","'",beginDate,"'"," AND ","'",endDate,"'"); END IF; #拼接标准科室 IF StandDeptId<>'' THEN SET cal1=CONCAT(cal1," ","AND DEPT_ID IN ( SELECT ID FROM department WHERE STAND_DEPT_ID = ","'",StandDeptId,"'",")"); END IF; #拼接数据来源 IF OperationFlag <>'' THEN SET cal1=CONCAT(cal1," ","AND OPEPARTKINDID IN (SELECT ID FROM zh_ssczfl WHERE FLAG= ","'",OperationFlag,"'",")"); END IF; #拼接手术操作类别 IF SsczflId <> '' THEN SET cal1=CONCAT(cal1," ","AND OPEPARTKINDID = ","'",SsczflId,"'"); END IF; SET cal2 =CONCAT(cal2,")"); SET @sql1=cal1; SET @sql2=cal2;PREPARE stmt1 FROM @sql1;EXECUTE stmt1;DEALLOCATE PREPARE stmt1 ; PREPARE stmt2 FROM @sql2;EXECUTE stmt2;DEALLOCATE PREPARE stmt2 ; SET OperNum=@para1; SET AvgDangerIndex=@para2; SET OperGrCase=@para3; END;2016-11-15
mengvlog 阅读 102 次 更新于 2025-09-09 20:28:02 我来答关注问题0
  • 当然可以,就是在mysql存储过程中使用动态sql,就可以拼接sql,然后执行了。给你复制一段,如果不满意,自己搜索 mysql 存储过程 动态sql 就可以了 DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE PROCEDURE SearchByDoctor( IN DoctorId VARCHAR(50), IN deptId VARCHAR(50), IN beginDate...

  •  深空见闻 mysql有没有存储过程

    例如,可以只允许用户执行存储过程,而不允许他们直接执行SQL语句。性能优化:存储过程在数据库服务器端执行,减少了网络传输的数据量。此外,由于存储过程是预编译的,数据库可以对其进行优化,从而提高执行效率。总结:MySQL支持存储过程,它们为数据库操作提供了一种高效、安全且可维护的方式。通过封装SQL语...

  • 存储过程需要在数据库中编写和存储,相比于应用程序的代码,存储过程的执行效率相对较低。这是因为存储过程的执行需要经过多次判断和查询,而且每次执行都需要从数据库中读取存储过程的定义。因此,如果存储过程的执行非常频繁,会给数据库带来较大的负担和性能瓶颈。另外,存储过程的执行计划也可能得不到优化。

  •  信必鑫服务平台 MySQL里面sql语句调用存储过程,该如何写?

    CREATE PROCEDURE sp_add(a int, b int,out c int)begin set c=a+ b;end;调用过程:call sp_add (1,2,@a);select @a;

  • MySQL:支持存储过程,这是一种在数据库中保存的SQL语句集合,可以通过调用存储过程来执行这些语句。存储过程可以接受参数、返回结果集,并且可以包含复杂的逻辑和流程控制。Redis:不直接支持类似MySQL中的存储过程。Redis的操作主要通过命令来实现,这些命令是原子性的,可以通过Lua脚本来实现复杂的逻辑和流程...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部