如何使用DBMS_CLOUD将包含多行字段的CSV文件加载至ADW?
解决ADW中使用DBMS_CLOUD.COPY_DATA加载含多行字段CSV的问题
你遇到的问题核心在于:默认情况下DBMS_CLOUD.COPY_DATA会把换行符当作记录分隔符,但你的O_DESC字段用双引号包裹了多行内容,过程误把字段内的换行当成了新记录的开始,导致加载失败。
关键修复方案
你需要在format参数中添加"quote" value '"'配置,同时修正recorddelimiter的错误写法。这个参数会告诉COPY_DATA:双引号包裹的内容是一个完整字段,哪怕里面包含换行符也不会被当作新记录。
修改后的完整执行代码
CREATE TABLE AW_TEST ( O_NO VARCHAR2(8), O_DESC VARCHAR2(200), O_DATE DATE ); BEGIN DBMS_CLOUD.COPY_DATA( table_name =>'AW_TEST' , credential_name =>'AW_CRED_NAME' , file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/mynamespace/b/mybucket/o/test.csv' , format => json_object( 'type' value 'CSV', 'delimiter' value ',', 'skipheaders' value '1', 'dateformat' value 'DD-Mon-YYYY HH24:MI:SS', 'blankasnull' value 'true', 'quote' value '"', 'recorddelimiter' value '\r\n' ) ); END; /
修复逻辑说明
quote参数的作用:指定字段的包裹字符为双引号,过程会自动将双引号之间的所有内容(包括换行、逗号等特殊字符)视为单个字段值,不会拆分。- 修正
recorddelimiter:你之前的写法'\'\r\n\''是错误的,正确写法是直接使用'\r\n'(如果是Unix风格换行可以用'\n')。启用quote参数后,过程会自动忽略引号内的换行,不会把它当作记录分隔符。
执行这段修改后的代码,就能正确加载你的两行数据,包括那些包含多行内容的O_DESC字段了。
内容的提问来源于stack exchange,提问作者Engin SENEL
相关产品推荐
相关产品推荐

