-1

我有一个包含数百万条记录的表,其中包含有关用户的信息、他或她在 BLOB 中的文档,以及一个包含每行文件大小的列。在报告时,我需要提取所有这些记录及其附件并将它们存储在一个文件夹中。但是,约束是文件夹大小不应超过 4GB。

我需要的是只获取记录直到该记录,其中文件大小的总和小于 4GB。我几乎没有任何数据库经验,也没有任何数据库专家可以参考。

例如 - 说我只需要获取记录直到 sum(fileSize) < 9

Name fileSize
A       1
B       2
C       3
D       2
E       9
F       4

我的查询需要返回记录 A、B、C 和 D。此外,我需要存储第一条和最后一条记录的 rowID/uniqueID 以用于另一个后续流程。正在使用的数据库是 IBM DB2。

谢谢!


您应该使用参数化 SQL,而不是直接在调用本身中包含值。所以像:

// The ... is because I didn't want to count the huge number of parameters...
// You'll need to fill in the right number of question marks.
String sql = "{call adminproduct(?, ?, ?, ?, ?, ...))}";
stmt = con.prepareCall(sql);
stmt.setString(1, pid);
stmt.setString(2, pname);
// Etc... all the parameters
stmt.executeUpdate(sql);   

永远不要在 SQL 中直接包含变量值,无论它们是调用存储过程还是普通 SQL。使用参数化 SQL 有三个主要好处:

  • 它可以防止SQL 注入攻击
  • 它避免了混乱的转换(尤其是日期/时间字段)
  • 通过将 SQL 与值分开,它使您的代码更清晰。(没有所有字符串连接,SQL容易阅读。)
4

1 回答 1

-1

所以这里有一些技巧,你可以找到你的文件大小。在程序中,您可以使用数据进行管理。

从文件中选择长度(file_data)

其中长度(文件数据)<99999999;

长度(文件数据)

        82944
        82944
        91136

选择了 3 行。

从文件中选择 dbms_lob.getlength(file_data)

其中长度(文件数据)<89999;

DBMS_LOB.GETLENGTH(FILE_DATA)

                    82944
                    82944

选择了 2 行。

dbms_lob.getlength() 与 length() 在 oracle 中查找 blob 大小

希望这可以帮助....

于 2013-10-25T14:49:43.557 回答