0

我正在从 matlab 中的 mysql 数据库中检索数据。

conn=database('my_database','','');
sql = 'call latest_hl_tradables()';
curs = exec(conn,sql);   
curs = fetch(curs);  

昨天,代码返回了 600 行。今天早上,它返回 1 行。如果我在 MySQL Workbench 中运行存储过程 (latest_hl_tradables),它仍然返回 600 行。

4

2 回答 2

0

奇怪的是,代码又开始工作了。

我所做的只是编写一些诊断代码来计算 latest_hl_tradables() 查询的表中的记录数。最初那些只返回 1 行。然后当他们开始返回所有行时。我不知道发生了什么变化。

于 2013-09-13T07:02:12.190 回答
0

(我的配置是 R2014b / SQL Server 2014 / MS JDBC 4.0。我相信 OP 描述的是一个通用问题,而不是特定于数据库供应商的问题)

我在 MATLAB 中也遇到过返回结果集的存储过程的不可靠结果。我向 Mathworks 提交了服务请求。简短的回答是,在这个用例中,Matlab 数据库工具箱函数 exec 或 runstoredprocedure 都不合适。相反,应该通过runsqlscript从 MATLAB 调用存储过程。以下是技术人员的回应:

不幸的是,没有办法使用游标对象获得查询的输出。在 DML 上获得输出的唯一方法是将它们作为脚本运行。语法是:

    >>results = runsqlscript(connObject,'ScriptName.sql')

where the SQL queries are placed in the file "ScriptName.sql". 
This will return cell array of results as the output

请注意,当您的存储过程需要输入参数时,此解决方案会使生活变得复杂。在 sp 参数不知道先验的典型情况下,这意味着您必须即时生成自定义 SQL 脚本并将其写入磁盘。

于 2014-08-15T20:28:28.340 回答