- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你能告诉我,为什么这个函数返回一个空的 blob 值吗?它甚至不会在循环后关闭 BFILE 类型变量。我无法想象问题出在哪里。
FUNCTION f$bfile_to_blob
(I_FID_ID IN INTEGER)
RETURN BLOB IS
bf BFILE;
Amount INTEGER := 32767;
Position integer := 1;
buffer RAW(32767);
bl LONG RAW := '';
bb BLOB;
BEGIN
select fid_bckp into bf
from filedoc
where fid_id = I_FID_ID;
dbms_lob.open(bf, dbms_lob.lob_readonly);
DBMS_LOB.CREATETEMPORARY(bb, TRUE, DBMS_LOB.SESSION);
LOOP
dbms_lob.read(bf, Amount, Position, buffer);
dbms_lob.writeappend(bb,amount,buffer);
Position := Position + Amount;
END LOOP;
dbms_lob.close(bf);
return bb;
END;
我这样调用函数
select F$BFILE_TO_BLOB(fid_id) from filedoc where fid_id = 2150;
最佳答案
您的逻辑很复杂,您混合了许多可能产生错误的元素:即 CLOB 和 BFILE。您应该首先尝试隔离函数中的哪个元素导致了这种异常行为。
我建议您运行一个简单的函数来确保您的 BLOB 逻辑没有问题:
create or replace FUNCTION f$bfile_to_blob
RETURN BLOB IS
bb BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(bb, TRUE, DBMS_LOB.SESSION);
bb := hextoraw('FFFFFFFF');
return bb;
END;
select rawtohex(dbms_lob.substr(f$bfile_to_blob, 4000, 1)) from dual;
这应该产生 FFFFFFFF。现在您知道问题在于您对 BFILE 对象的读取。我们可以在您的代码中看到您有一个没有退出条件的循环。由于程序退出,我们推断您的循环退出时出现错误。
documentation解释异常是由 READ
过程引发的:
The number of bytes or characters actually read is returned in the amount parameter. If the input offset points past the End of LOB, then amount is set to 0, and a NO_DATA_FOUND exception is raised.
异常被抛出,函数没有返回任何东西就退出了。
如您所知,NO_DATA_FOUND
异常不被视为 SQL 语句中的错误。 SELECT
查询将错误解释为 NULL
。
你应该修改你的函数来捕捉这个错误并优雅地退出循环:
FUNCTION f$bfile_to_blob(I_FID_ID IN INTEGER)
RETURN BLOB IS
bf BFILE;
Amount INTEGER := 32767;
Position INTEGER := 1;
buffer RAW(32767);
bl LONG RAW := '';
bb BLOB;
BEGIN
SELECT fid_bckp
INTO bf
FROM filedoc
WHERE fid_id = I_FID_ID;
dbms_lob.open(bf, dbms_lob.lob_readonly);
DBMS_LOB.CREATETEMPORARY(bb, TRUE, DBMS_LOB.SESSION);
LOOP
BEGIN
dbms_lob.read(bf, Amount, Position, buffer);
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
dbms_lob.writeappend(bb, amount, buffer);
Position := Position + Amount;
END LOOP;
dbms_lob.close(bf);
RETURN bb;
END;
关于oracle - pl/sql 中用于将 bfile 读入 blob 的函数不显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263816/
PL/1 中有许多不同的数字数据类型。我想知道什么时候有整数除法,什么地方没有。暂时,我写了一个小例子来说明(至少对我而言)PL/1 非常纠结于其中: DCL BIN15 FIXED BIN(15)
我是 Prolog 的新手。我有两个文件。其中之一是“names.pl”,另一个是“verbs.pl”。这两个文件都有事实。 “names.pl”有关于很多名词等的事实。事实的名字是关系。 这些文件的
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我正在处理一个存储的 PL/SQL 函数,该函数根据给定的员工编号查找员工的家属姓名。到目前为止,我能够获得所需的输出,但在输出期间似乎有逗号问题。对于如何在输出过程中删除最后一个括号,我们将不胜
我观察到有两种执行 perl 程序的方法: perl test.pl 和 ./test.pl 这两者之间的确切区别是什么,哪一个值得推荐? 最佳答案 我将稍微改写其他答案所说的内容。 第一种情况将运行
我有一个表 TDATAMAP,其中包含大约 1000 万条记录,我想将所有记录提取到 PL/SQL 表类型变量中,将其与某些条件进行匹配,最后将所有必需的记录插入临时表中。请告诉我是否可以使用 PL/
一切都在标题中。 我在游标上循环并想要 EXIT WHEN curs%NOTFOUND 当没有更多行时,PostgreSQL 下的 %NOTFOUND 等同于什么? 编辑 或其他游标属性 %ISOPE
CREATE FUNCTION foo() RETURNS text LANGUAGE plperl AS $$ return 'foo'; $$; CREATE FU
我正在使用 ack.pl 工具来搜索文件中的字符串或 IP ack.pl 的官方网站是 - http://beyondgrep.com/documentation/ ack.pl CLI 示例(想在/
代码 #!/usr/bin/perl -I/root/Lib/ use Data::Dumper; print Dumper \@INC; 以上代码文件名为test.pl,权限为755。 当我使用/u
编写一个 PL/SQL 过程,将员工编号和薪水作为输入参数,并从经理为 'BLAKE' 且薪水在 1000 到 2000 之间的员工表中删除。 我写了下面的代码:- create or replac
我需要对更新行进行一些审核。 所以我有一个函数,它接收 some_table%ROWTYPE 类型的参数,其中包含要为该行保存的新值。 我还需要在历史表中保存一些有关更改的列值的信息。我正在考虑从 a
如果我在 PL/SQL 存储过程中使用许多 CLOB 变量来存储许多长字符串,是否存在性能问题? CLOB 的长度也是可变的吗? CLOB 代替使用 varchar2 和 long 是否有任何已知的限
我想使用 JavaScript/Apex 创建一个按钮,这样当我点击它时,就会“调用”一个 PL-SQL 过程。与常规 html 按钮类似,但 onClick="JavaScript function
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
今天的好时间,想问问有没有人知道在IBM Bluemix 云上安装PostgreSQL 扩展(准确的说是pl/r 和pl/python)的方法是什么?我在那里运行 compose-postgresql
是否可以像普通 Python 函数一样从其他 PL/Python block 调用 PL/Python 函数。 例如,我有一个函数f1: create or replace function f1()
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在使用返回 REF CURSOR 的 Java 在 PL/SQL 中调用存储函数: FUNCTION getApprovers RETURN approvers_cursor IS app
通过终端修改Webmin密码时 Can't locate ./acl/md5-lib.pl at /usr/share/webmin/changepass.pl 使用 Ubuntu 20 最佳答案 U
我是一名优秀的程序员,十分优秀!