前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql-存储过程

Mysql-存储过程

作者头像
kdyonly
发布2024-03-12 13:33:51
1060
发布2024-03-12 13:33:51
举报
文章被收录于专栏:个人编程笔记

最近干的工作就是将SqlServer数据库替换成Mysql数据库,目的是为了后续的软件的国产化,这其中就涉及了大量的脚本需要修改成支持Mysql数据库的脚本,改动比较大就是存储过程的脚本,二者的语法有些区别。

对mysql的语法不是很熟,故做此记录,后续可能会有参考,就可以快速找到了,记录一个实际的例子,中间涉及一些常用的操作,比如:创建临时表,游标的使用,执行sql语句等,当然,写出来的脚本可能不是很完美,但是可以运行,可能会有抄写错误,仅供参考。

代码语言:javascript
复制
begin
declare equipId int;
declare tableName varchar(100);--表名
declare columnName varchar(100);--字段名
declare columnCHName varchar(100);--字段中文名
declare dataTypeName varchar(100);--数据类
declare dataTypeCHName varchar(100);
declare dataLength int;
declare fKeyColumnName varchar(100):
declare fKeyTableName varchar(100);
declare fKeyDisplayName varchar(100);
declare propId int;是否显示
declare isShow int;--是否显示
declare colLevel int;
declare currentDb VARCHAR(100);
declare strSql TEXT;
declare done INT DEFAULT O:
declare tmpPrTableCursor CURSOR FOR SELECT * from TmpPrTable;
declare CONTINUE HANDLERFOR NOT FOUND SET done = 1:


CREATE TEMPORARY TABLE IF NOTEXISTS TmpPropTable(
    Prop Id int,
    Prop_Name varchar(100),
    Prop_CHName varchar(100)
    Prop_Value varchar(200),
    DataType_CHName varchar(100)
    DataType_Name varchar(100),
    DATA_LENGTH int,
    PropType varchar(100),
    Table_Name varchar(100),
    TEQUIP_ID int,
    DEV_ID int,
    FKEY_COLUMN_NAME varchar(100),
    FKEY_TABLE_NAME varchar(100),
    FKEY_DISPLAY_NAME varchar(100),
    IS_SHOW int
);

CREATE TEMPORARY TABLE IF NOT EXISTS TmpPropValueTable(
    PrOpValue VARCHAR(50)
);

CREATE TEMPORARY TABLE IF NOT EXISTS TmpPrTable(
    TABLE_NAME varchar(100),
    REC_ID int,
    COLUMN_NAME varchar(100),
    COLUMN_CHNAME varchar(100),
    DATATYPE_CHNAME varchar(100),
    DATATYPE_NAME varchar(100),
    DATA_LENGTH int,
    FKEY_COLUMN_NAME varchar(100),
    FKEY_TABLE_NAME varchar(100),
    FKEY_DISPLAY_NAME varchar(100),
    COLUMN LEVEL INT
);

set currentDb=DATABASE():
select TABLE_NAME INTO tableName from TEQUIP GROUP aS a LEFT JOIN TEQUIP BENCHMARK as b on a.bunchGuid = b.Guid where a.GUID=tequipguid;
select REC_ID INTo equipId from TEQUIP_GROUP where GUID = tequipguid;
set strSql = CONCAT("insert into TmpPropvaluerable(Propvalue) select GulD from ",tableName," where DEETE_FLAG=0 AND GUID = '", devguid, "'");
-- select strSql;
set @strSql=strSql;
PREPARE stmt FROM @strSql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt:
-- select * from TmpPropValueTable;

delete from TmpPrTable;
set strSql="此处省略sql语句";
set @strSql=strSql;
PREPARE stmt FROM @strSql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt:

-- 清空数据
DELETE FROM TmpPropTable;
open tmpPrTableCursor;
read_loop: LO0P
fetch tmpPrTableCursor into tableName,propId,columnName,columnCHName,dataTypeCHName,dataTypeName,dataLength,fKeyColumnName,fKeyTableName,fKeyDisplayName,colLevel;
IF done=1 THEN
    LEAVE read_loop;
END IF;
DELETE FROM TmpPropvalueTable;
IF LENGTH(fKeyTableName)>0 THEN
    -- 如果不是存储过程则执行
    IF EXISTS (SELECT 1 FROM information_schema.TABLES WHERE TABLE_NAME = fKeyTableName) THEN
        set strSql="此处省略sql语句";
    END IF;
    IF LENGTH(strSql)>0 THEN
        set @strSql=strSql;
        PREPARE stmt FROM strsql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF:
    -- ……
END LOOP:
CLOsE tmpPrTableCursor;
-- ……
select * form TmpPropTable;
end

图片预览

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档