为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:linux
【CPU】:
【问题描述】*:使用dmpython,调用utl_file包,获得远程主机上的文件内容
dmpython连接SYSDBA用户,执行以下sql,再调用dbms_output.get_line获得文件长度
cursor.callproc("dbms_output.enable")
cursor = conn.cursor("DECLARE
l_fileID UTL_FILE.FILE_TYPE;
l_value VARCHAR2(32000);
l_exists BOOLEAN;
l_file_length NUMBER;
l_blocksize NUMBER;
BEGIN UTL_FILE.fgetattr('ODATPREFIXIOKYSLEEFBTEXUWPWGPX', 'pwd.txt', l_exists, l_file_length, l_blocksize);
dbms_output.put_line(l_file_length);
END;")
定义文件长度和状态
statusVar = cursor.var(dmPython.NUMBER)
lineVar = cursor.var(dmPython.STRING)
cursor.callproc("dbms_output.get_line", lineVar, statusVar)
为什么statusVar.getvalue()=1 (<dmPython.REAL with value 1.0>),并且linVar为空(<dmPython.STRING with value None>),显示读取失败,但是在dm manager可以执行以上sql,能显示文件长度
ODATPREFIXIOKYSLEEFBTEXUWPWGPX目录是客户端提前调用dmpython创建的,该目录对应数据库所在远程主机目录,由上图可知客户端创建目录成功,数据库所在主机的dm manager能使用相同的PL/SQL获得文件长度,但客户端无法通过调用dbms_output.get_line获得。
可能和驱动有关,建议使用数据库自带的版本驱动,在软件安装目录/dmdbms/drivers/下面