这个问题是关于Intersystems-Cache数据库的。
我目前正在使用$$$ResultSet("MySQLQueryText")从表中选择BLOB,但这可能是将BLOB写入表,然后从表中读出,而不是直接写入输出BLOB。
.INT代码编译为创建%Library.ProcedureContext对象的代码,然后在该对象上调用NewResultSet()。然而,NewResultSet的源代码有一条评论:“只在内部使用,不直接调用”。
是否有一种支持的方法可以有效地创建一个只有一个BLOB列的单一记录的结果集?理想情况下,我希望类似于一个流对象,并直接写入该对象,并让它直接进入ODBC (或其他)驱动程序,而无需复制流。如果有一个支持的解决方案使用另一个不完全是流的对象,那么这也是很棒的。
发布于 2014-01-10 21:18:50
@psr -基于评论中的讨论,我认为您应该能够使用如下代码:
/// Method that will take in various arguments and return a BLOB as an output argument
ClassMethod GetBLOB(
arg1 As %String,
arg2 As %String,
...
Output blob As %Stream.TmpBinary) [ SqlProc ]
{
// Do work to produce your BLOB
Set blob = yourBLOB
Quit
}对BLOB的实际支持可能取决于您的客户端软件,以及您是在使用ODBC还是JDBC,但任何合理的最近情况都不会带来任何问题。
您将使用如下语法调用此存储过程:
CALL Your_Schema.YourClass_GetBLOB('arg1','arg2',?)然后,检索BLOB的实际方法将取决于客户端软件和access方法。还可以通过在SqlName = MyGetBLOB关键字旁边添加SqlProc来控制存储过程名称(即模式后面的部分)。
https://stackoverflow.com/questions/20960627
复制相似问题