提取多条记录时,从plsql脚本生成空jpg文件的原因是什么

提取多条记录时,从plsql脚本生成空jpg文件的原因是什么,plsql,plsqldeveloper,Plsql,Plsqldeveloper,我在plsql中有这个脚本,我试图将图像提取到一个目录中,在这个目录中,我在一个数据库中有100条记录,代码正在提取所有记录,但它们都是空白文件,这可能是什么问题 下面是代码块,请协助 --create or replace directory my_dir as '/export/home/Desktop/Pic'; DECLARE v_dir varchar2(10):='MY_DIR'; t_blob BLOB; t_len NUMBER; t_file_name VARCHAR2(1

我在plsql中有这个脚本,我试图将图像提取到一个目录中,在这个目录中,我在一个数据库中有100条记录,代码正在提取所有记录,但它们都是空白文件,这可能是什么问题

下面是代码块,请协助

--create or replace directory my_dir as '/export/home/Desktop/Pic';

DECLARE

v_dir varchar2(10):='MY_DIR';
t_blob BLOB;
t_len NUMBER;
t_file_name VARCHAR2(100);
t_output UTL_FILE.file_type;
t_TotalSize number;
t_position number := 1;
t_chucklen NUMBER := 4096;
t_chuck raw(4096);
t_remain number;

BEGIN
FOR i IN 1..100 LOOP


SELECT DBMS_LOB.getlength (IMAGE), brid ||'P.jpg'
    INTO t_TotalSize, t_file_name FROM Photo WHERE IMAGEID=i;

IF (t_file_name IS NOT NULL) THEN


dbms_output.put_line('Got: ' || t_file_name);

t_remain := t_TotalSize;
t_output := UTL_FILE.fopen (v_dir, t_file_name, 'WB', 32760);

SELECT IMAGE INTO t_blob FROM Photo WHERE IMAGEID=i;

WHILE t_position < t_TotalSize LOOP
    DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck);
    UTL_FILE.put_raw (t_output, t_chuck);
    UTL_FILE.fflush (t_output);
    t_position := t_position + t_chucklen;
    t_remain := t_remain - t_chucklen;
    IF t_remain < 4096
    THEN
        t_chucklen := t_remain;
    END IF;
END LOOP;
END IF;
END LOOP;
UTL_FILE.fclose (t_output);
END; 
——将目录my_dir创建或替换为“/export/home/Desktop/Pic”;
声明
v_dir varchar2(10):='MY_dir';
t_blob blob;
图伦数;
文件名VARCHAR2(100);
t_输出UTL_文件。文件类型;
t_总尺寸数;
t_位置编号:=1;
t_chucklen编号:=4096;
t_卡盘未加工(4096);
t_剩余数量;
开始
对于1..100循环中的i
选择DBMS|u LOB.getlength(图像),brid ||'P.jpg'
在t_TotalSize中,t_file_name来自照片,其中IMAGEID=i;
如果(t_文件名不为空),则
dbms_output.put_line('Got:'|| t|u file_name);
t_剩余:=t_总尺寸;
t_输出:=UTL_FILE.fopen(v_dir,t_FILE_名称'WB',32760);
从照片中将图像选择为t_blob,其中IMAGEID=i;
当t_位置
我建议将UTL\u FILE.fclose(t\u输出)移动;在结束之前,如果:

END LOOP;
UTL_FILE.fclose (t_output);
END IF;
END LOOP;

我建议移动UTL_FILE.fclose(t_输出);在结束之前,如果:

END LOOP;
UTL_FILE.fclose (t_output);
END IF;
END LOOP;

您好,我创建了一个带有BLOB列的表,在其中插入了一张照片,并调用了您的代码,它可以正常工作,所以您可能在其他地方有问题(可能是表本身或可能是插入过程),感谢您的响应,但是,当我仅为一条记录调用上述代码时,它可以正常工作,挑战是当表有多条记录时,我想提取所有记录。set t_position:=0 inside loop我已将其设置为0,但现在得到以下错误
ORA-21560:参数2为null、无效或超出范围ORA-06512:在“SYS.DBMS_LOB”的1056行ORA-06512:在第34行
抱歉,将其设置为1Hi,我创建了一个带有BLOB列的表,在其中插入了一张照片,并调用了您的代码,它可以正常工作,因此可能您在其他地方有问题(可能是表本身,也可能是插入过程),感谢您的响应,但是,当我仅为一条记录调用上述代码时,它可以正常工作,挑战是当表有多条记录时,我想提取所有记录。set t_position:=0 inside loop我已将其设置为0,但现在得到以下错误
ORA-21560:参数2为null、无效或超出范围ORA-06512:在“SYS.DBMS_LOB”第1056行ORA-06512:在第34行
抱歉,将其设置为1