MSSQL转MYSQL, 帮我看下改写的存储过程写的有没有问题

NIJIA72 2012-08-16 01:14:50
由于业务需要, MSSQL数据库转到MYSQL
之前没怎么接触过MYSQL, 看了两天资料就动手改写存储过程, 下面是改的第一个
执行成功了, 各位帮我看下有没有什么地方写的不对或语法上不规范



-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `prAllUser_AddNewUser`(
IN iPUserID varchar(32) -- 来源方用户ID
, IN iPLoginName varchar(32) -- 来源方用户登录名
, IN iNickName varchar(32) -- 游戏昵称
, IN iSex char -- 性别 w/m
, IN iAdult char -- 成年用户 y/n
, IN iSite varchar(32) -- 第三方用户标识
, OUT oUserID int -- 本地用户ID
, OUT oErrMsg varchar(1024) -- 出错信息
, OUT oResult tinyint -- 出错信息
-- , @intIntroID int = -1 -- 推广员ID
)
proc : BEGIN
DECLARE txn_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
SET txn_error = -1;
END;

IF iPUserID = '' THEN
SET oErrMsg = 'iPUserID = ';
SET oResult = -1;
leave proc;
END IF;

SELECT UserID INTO oUserID FROM com_alluser_site WHERE PUserID = iPUserID AND Site = iSite;
-- ---------------------如果用户已存在,同步用户信息-----------------------
IF (oUserID > 0) THEN
IF(iNickName = '') THEN
UPDATE com_allUser
SET Sex = iSex
,Adult = iAdult
,LastTime = NOW()
WHERE UserID = oUserID;
ELSE
UPDATE com_allUser
SET NickName = iNickName
,Sex = iSex
,Adult = iAdult
,LastTime = NOW()
WHERE UserID = oUserID;
END IF;

SET oErrMsg = '登录成功,用户信息已同步';
SET oResult = 2;
leave proc;
END IF;

-- ---------------------用户不存在,添加用户信息-----------------------
START TRANSACTION;
CALL prAllUser_GenUserID(oUserID);

IF oUserID = -1 THEN
SET oErrMsg = '获取新用户ID出错!';
SET oResult = -1;
leave proc;
END IF;

SET @FaceID = '2.png';
IF iSex = 'm' THEN
SET @FaceID = '1.png';
END IF;

IF (iNickName = '') THEN
SET iNickName = '新用户' + RIGHT(iPUserID, 4);
END IF;

-- 来源映射表
INSERT INTO `usercenter`.`com_alluser_site`
(`PLoginName`,`PUserID`,`Site`,`UserID`)
VALUES
(iPLoginName,iPUserID,iSite,oUserID);

-- 基本表
INSERT INTO `usercenter`.`com_alluser`
(`Adult`,`FaceID`,`LastTime`,`NickName`,`RegTime`,`Sex`,`Status`,`UserID`)
VALUES
(iAdult,@FaceID,Now(),iNickName,Now(),iSex,1,oUserID);

-- 初始化保险箱
SET @PwdSalt = left(replace(uuid(), '-', ''),8);
SET @DBPassword = md5('888888' + @PwdSalt);

INSERT INTO `usercenter`.`com_alluser_safebox`
(`Money`,`PwdSalt`,`SafePassword`,`UserID`)
VALUES
(0,@PwdSalt,@DBPassword,oUserID);

IF txn_error THEN
ROLLBACK;
SET oErrMsg = '新用户添加失败!';
SET oResult = -1;
leave proc;
END IF;

COMMIT;

SET oErrMsg = '新用户添加成功';
SET oResult = 1;
END
...全文
203 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
纵横之道 2013-05-08
  • 打赏
  • 举报
回复
引用 5 楼 yhy785864861 的回复:
USE [lg100] GO /****** Object: StoredProcedure [dbo].[User_Exists] Script Date: 05/08/2013 13:14:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[User_Exists] @users varchar(50) AS BEGIN Declare @tem int SET NOCOUNT ON; if exists(select [username] from [users] where [username] = @users) set @tem = 1 else set @tem = 0 return @tem END
可以帮忙改一下吗,MYSQL不是很了解,改一个列子参考一下,万分感谢!
纵横之道 2013-05-08
  • 打赏
  • 举报
回复
USE [lg100] GO /****** Object: StoredProcedure [dbo].[User_Exists] Script Date: 05/08/2013 13:14:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[User_Exists] @users varchar(50) AS BEGIN Declare @tem int SET NOCOUNT ON; if exists(select [username] from [users] where [username] = @users) set @tem = 1 else set @tem = 0 return @tem END
jsuper1261 2012-08-17
  • 打赏
  • 举报
回复
那就像他问的,
什么时候用哪种变量呢?
ACMAIN_CHM 2012-08-16
  • 打赏
  • 举报
回复
@VAL 是SESSIO怕变量,无需声明。

DECLARE pVal int 仅是模块内的变量。
NIJIA72 2012-08-16
  • 打赏
  • 举报
回复
我就是有一点搞不明白,使用变量时, 什么时候用
DECLARE pVal int
什么时候用
@VAL

只知道 @VAL可以直接使用,不用先定义, 但这个是会话变量,
比如存储过程里使用了@val
执行完了存储过程, SELECT @VAL还是有值, 变量没有释放

使用declare val int; 又好象只能在存储过程里BEGIN开始那地方用

不明白什么时候用什么变量

rucypli 2012-08-16
  • 打赏
  • 举报
回复
没啥不对的 不对的就报错了

主要看结果集是否正确
CIMCO Integration 是一家专门致力于工业自动化 (IA) 行业 CNC/DNC 细分市场的全球性公司。CIMCO 为航空、汽车、铸造、精密仪器和生产制造领域的离散厂商提供完整的一揽子解决方案。CIMCO Integration 是 DNC 行业的领先供应商,在全球设有专业代表处,随时可以为各种规模的公司提供灵活、可靠、经济的 CNC 网络和通信解决方案。 CIMCO Integration公司为全球的计算机集成制造厂商提供软件,其软件产品线包括CNC-Editors和DNC软件,用于存储和检索NC程序、NC程序优化、后处理、以及快速NC程序仿真。 这是一款著名的数控程序的编辑和仿真工具.可进行存储和检索NC程序、NC程序优化、后处理、以及快速NC程序仿真。 CIMCO Edit 8 中文版CIMCO Edit 8 中文版 CIMCO 8 发布 CIMCO 8 是一项重大更新,可在整个CIMCO软件产品线上提供强大的新功能,更快的性能和简化的用户体验。 CIMCO Edit 8 CIMCO Edit 8带有重新设计的用户界面,允许用户完全自定义功能区,从而实现高级工作流程优化。 已经开发了一个新的FTP客户端,并与编辑器传输实用程序集成在一起,实现了FTP服务器之间的轻松FTP传输。 开发了一个新的高级“打开文件”对话框,通过在文件名,文件内容和创建/修改日期中指定搜索条件,可以更容易地定位文件。 文档编辑功能和反向绘图功能得到了改进,并且增加了更多换器。 CIMCO CNC-Calc 8 CIMCO CNC-Calc具有三种新的高级刀具路径策略:恒定切入内部切入,恒定切入内切和恒定切入车削。 不断切出内心 恒定切入内部输出的工作方式与口袋铣削操作相同,但是用于铣削这个内部口袋的策略是高度灵活的恒定切割策略。恒定切削策略是一种非常有效和快速的策略,因为它允许操作员使用非常高的进给速度并进行非常深的切削。 不断切入里面 这个操作是用来从外面铣削零件的。这意味着它可以铣一个开放的口袋或者一些岛突出的零件的顶部。该操作是使用非常有效的恒定切割策略生成的。所有的恒定切削铣削策略可以产生为爬升,常规或双向铣削。 恒定切削车削 这个新的操作使用恒定切割策略来生成非常高效的粗加工操作。此操作可以作为一种单向或双向操作来提高性能。 此外,还增加了一个带插图的改进的助系统。 CIMCO DNC-Max 8 在CIMCO软件8中,DNC-Max Server和DNC-Max Client都收到了一个全新的用户界面,它遵循CIMCO Edit 8的新设计语言。DNC-Max Client的更新不仅涉及独立应用程序,还可以在CIMCO Edit 8中作为插件运行。 此外,现在支持通过HTTP传输Brother MDC信号。 Brother控制C00本地支持以太网和HTTP接口。这可用于获取诸如CYCLE START / STOP,运行程序编号,警报和零件计数等信号。 CIMCO NC-Base 8 CIMCO NC-Base 8现在使用Marie DB作为主数据库。新数据库更快,支持MySQL V5的所有功能,包括加密。 CIMCO MDC-Max 8 CIMCO MDC-Max收到了遵循CIMCO Edit 8新设计语言的全新用户界面。 CIMCO MDC-Max 8已被为新的多线程引擎,大大提高了性能。在重建操作过程中,用户现在可以在实时屏幕和操作员屏幕上查看机器的当前状态。 CIMCO MDC-Max 8还具有一个新的归档系统,处理的缓存数据存储在数据库中,以供客户快速访问。 MDC-Max中的新功能: 服务器端的多线程引擎 中央缓存+归档过程 新的用户权限系统 有条件禁用的按钮或输入字段 操作员屏幕上的组合框可以显示CSV值 MDC客户端的自动软件更新 新的数据库表格 – 表格是实时填的 事件日志和订单视图导出到Excel 操作员通知 与任意开始工作周多个时间表 扩展报告选择窗口 多线程引擎的CPU亲和力 从命令行发送电子邮件中的报告 PDF格式的HTML报告 支持XLSX和XLSM格式 新的MSSQL数据库连接器 操作员屏幕可显示从数据库加载的用户 支持Brother HTTP协议 – C00 CIMCO软件管理器 CIMCO软件管理器是一个新的产品,将集中控制,日志查看和配置在 CIMCO 软件包中找到的各种服务程序。目前,它控制许可证服务器,但将来还将包括DNC-Max Server Enterprise,NC-Base Server和NFS Server。 支持的操作系统:支持 Windows Vista/7/8.x/10/Server 2008/2008 R2 和 Server 2

56,803

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧