mysql - 将Foxpro程序转换为MySQL存储过程

标签 mysql stored-procedures visual-foxpro foxpro set-based

我正在使用 Ruby on Rails 和 MySQL 将遗留系统转换为 Web 应用程序。

在将数据层转换为 MySQL 过程时,我遇到了一些困难。

给出下面的场景;

FUNCTION first_function
SELE Table1
REPL Table1.SmaCode WITH SMA(code,HcPc,FromDate)
ENDFUNC

FUNCTION SMA
... Lot of conditions ...
Lookup(param1,param2) * Parameters are based on the conditions above
.. Lot more conditions ....
ENDFUNC

FUNCTION Lookup
temp = Output of select on Check table 
return temp
ENDFUNC

这里 SMA 是另一个函数,它有很多条件,它还调用另一个函数 Lookup。在Lookup函数中,它查询一个名为Checks的表,Lookup的参数基于SMA。

如果您需要更多了解,请参阅讨论中源代码的pastebin。 http://pastebin.com/raw/Hvx3b8zN

如何将这种函数转换为MySQL程序?

编辑: 我正在寻找已经完成这些类型转换的人对此的见解,从面向过程的语言到准确地说基于集合的存储过程。

最佳答案

评论员都很好,我都点了。您必须实际编写代码,但一旦开始编写就不会太难。

我做的第一件事就是检查我的代码,并将所有简单的内容重写,例如 DELETE FOR .... 为 DELETE WHERE...

然后我查看循环并思考如何将这些数据视为一个集合。很多时候,当您使用适当的 JOIN 条件和 WHERE 条件时,SCAN 可以编写为常规查询。有很多查询工具(例如 CASE 和子查询)可以让您用很少的代码完成大量工作。 MySQL 允许使用临时表,这非常有用。查找通常可以通过子查询来完成。

有时,我必须使用 FETCH 和 WHILE 循环,但我会尽可能避免这样做,因为它很慢并且 SQL 是基于设置的。

只要从简单的事情开始,你就会掌握它的窍门:)

关于mysql - 将Foxpro程序转换为MySQL存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38628513/

相关文章:

sql-server - 如何在 SQL Server 过程/触发器中查找文本?

sql - Foxpro 哪里的表达式无效?

php - 如何编写自定义查询codeigniter

sql - 如何在垂直设计的表格上实现搜索?

mysql - 添加created_at和updated_at到LOAD DATA INFILE数据

mysql - 连接在选择查询中不起作用

SQL Server : Function is returning single char in stored procedure

c++ - 将 Informix Object Interface for C++ 用于不带参数的存储过程/函数

.net - FoxPro 和 .NET COM 无需注册

visual-foxpro - Windows 10 1803 的 VFP 网络问题