我对存储过程非常不熟悉,所以一直在努力解决这个问题。我所拥有的是一个数据库,其中包含一列MEDIUMBLOB。
这个数据实际上是二进制数据,它是我的Double Array的字符串表示。表示纯粹是每个8个字节对应于每个值,用空字节\ 00填充。例如:
\ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ F0?\ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ b @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 10 @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 14 @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 18 @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 1C @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ S @ \ 00 \ 00 \ 00 \ 00 \ 00 \ 00" @
对应于:
0,1,2,3,4,5,6,7,8,9
我能够以编程方式使用LabVIEW中的Unflatten来检索我的值,因此我已经确定数据存储正确。我现在需要对存储过程征收相同的回复。
不幸的是,这是我遇到障碍的地方,我的两个主要困难是:如何返回数组,因为MySQL不支持数组或列表;从testtable中选择'Data'中的数据检索到一个字符串变量然后我可以操作并希望使用子字符串,字符串长度和转换函数与循环来获取我的数组。
注意:我正在使用带有MySQL Connector的MariaDB数据库并在Heidi中创建我的程序。
这是我最近的迭代,它试图使用临时表:
DELIMITER //
CREATE or replace procedure get_values (IN RowNumber Integer, OUT Value DOUBLE)
DETERMINISTIC
CREATE TEMPORARY TABLE T1(TSVals MEDIUMBLOB);
select `DATA` INTO T1 from prop_binary;
i number := 1;
begin
for r in TS_values loop
b number := Length(r);
c number := 0;
REPEAT
Value = convert(substring(r,(c*8),8),double);
i := i + 1;
c := c + 1;
UNTIL c > (b/8);
end loop;
end get_values;
我不一定要找到一个直接的答案,指出如何做到这一点以及任何能够为我提供所需理解和技能的材料也会有所帮助。
编辑:我以前曾尝试使用软件包(我也不熟悉)来定义一个我可以在我的程序中返回的数组,但这似乎是徒劳的,所以当前的方法是简单地要求特定的要返回的值,但对于整个数据集,首选值数组。