如何在ADW自治数据库中使用UTL_FILE访问对象存储等云存储服务
自治数据库(ADB)中UTL_FILE访问云存储的相关说明
核心结论
不可以直接使用传统UTL_FILE接口访问对象存储或其他云存储服务
ADB作为完全托管的云原生数据库服务,默认隔离了底层操作系统的文件系统访问权限,而UTL_FILE本身是面向本地操作系统文件设计的API,因此你本地部署环境中使用的UTL_FILE.PUT_LINE(v_file, 'col1,col2,col3');这类直接操作OS文件的代码,无法直接在ADB中运行。
等效实现方案
ADB官方提供了专门的DBMS_CLOUD包来满足云存储读写需求,你可以用该包实现原UTL_FILE的全部文件读写逻辑,且原生支持OCI对象存储、AWS S3、阿里云OSS等主流云存储服务,不需要依赖本地OS文件:
- 如果你需要将结构化数据导出为CSV、JSON等格式的文件存储到云存储,可以直接调用
DBMS_CLOUD.EXPORT_DATA接口,无需逐行写入,执行效率更高。 - 如果你需要逐行读写云存储中的非结构化文本文件,可以先通过
DBMS_CLOUD将目标云存储路径挂载为数据库外部表,再通过SQL读写外部表实现等效的逐行操作。
等效写入CSV到云存储的代码示例
以下代码可以完全替代你本地环境中用UTL_FILE逐行写入CSV的逻辑:
BEGIN DBMS_CLOUD.EXPORT_DATA( credential_name => '你提前创建的云存储认证凭据名称', file_uri_list => '云存储文件的访问URI', format => '{"type":"csv", "delimiter":",", "header":true}', query => 'SELECT col1, col2, col3 FROM 你的业务表' ); END; /
注:上述代码执行后会直接将查询结果按CSV格式写入指定的云存储路径,自动生成表头行,效果和原UTL_FILE逐行写入本地CSV文件完全一致。
内容的提问来源于stack exchange,提问作者Mijatovic
相关产品推荐
相关产品推荐

