【问题标题】:Converting Foxpro program to MySQL stored procedure将 Foxpro 程序转换为 MySQL 存储过程
【发布时间】:2016-07-28 06:22:40
【问题描述】:

我正在使用 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 程序?

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

【问题讨论】:

  • 查看 VFP 代码以及在编写 MySQL 存储过程中可用的内容,我认为将其留在数据层并在 Ruby 中执行将是一种更简单的方法。无论哪种方式,您只需要识别和记录 VFP 代码正在做什么并复制它。
  • 忘了提到我已经尝试在 ruby​​ 中做到这一点。问题是当我们将数据加载到 ruby​​ 时,内存占用很高。
  • 没有自动语言转换器或技巧,您必须使用MySQL语法根据您的业务需要编写代码。
  • @IvanCachicatari 我的目的是收集一些关于将程序语言转换为基于集合的 MySQL 查询的想法,这听起来并不像是我要求精确的 MySQL 语法,如果我的问题正在滋生,我深表歉意混乱。
  • @Vizkrig Foxpro 命令基于当前记录和打开的表,我是老派开发人员,我也使用过 vfp,如果没有示例数据或前后示例,很难翻译 vfp 代码,一些遗留程序现在可以根据语言用一行来解决。

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


【解决方案1】:

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

我要做的第一件事是检查我的代码并将所有简单的东西(如 DELETE FOR ....)重写为 DELETE WHERE...

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

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

只要开始简单的东西,你就会掌握它的窍门:)

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2021-08-17
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多