【发布时间】:2021-10-25 16:36:42
【问题描述】:
当我尝试在存储过程或打包程序中使用 DBMS_CLOUD.CREATE_EXTERNAL_TABLE 动态构建表时遇到问题。动态代码的 dbms_ouput.put_line 将生成正确的代码,我可以复制并在新会话中运行没问题,但不能在 PROC 或 PACKAGE 内。错误:开发 - ORA-06550:第 1 行,第 1 列: PLS-00201:必须声明标识符“DBMS_CLOUD”
select *
from USER_SYS_PRIVS;
username privilege admin_option
TEST CREATE RULE SET NO
TEST CREATE TABLE NO
TEST CREATE EVALUATION CONTEXT NO
TEST SELECT ANY DICTIONARY NO
TEST CREATE JOB NO
TEST CREATE RULE NO
测试过程
create or replace procedure test
AS
l_cloud_statement clob;
L_error_msg varchar2(4000);
begin
l_cloud_statement:= 'BEGIN'||CHR(13)||
'DBMS_CLOUD.CREATE_EXTERNAL_TABLE('||CHR(13)||
'table_name => ''TESTING_EXT_TAB'','||CHR(13)||
'credential_name => ''TEST_OBJ_STORE'','||CHR(13)||
'file_uri_list => ''https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/rks6fos4/b/bucketuploads/o/testing_tab.csv'','||CHR(13)||
'format => json_object(''delimiter'' value '','',''skipheaders'' value ''1''),'||CHR(13)||
'column_list => ''col1 varchar2(200)'');'||chr(13)||
'END;';
dbms_output.put_line(l_cloud_statement);
execute IMMEDIATE l_cloud_statement;
exception
WHEN OTHERS THEN
L_error_msg := SQLERRM;
TEST_SYSTEM.log_error(GP_error_msg,
'TEST', -- program
'DEV', -- error type
'0001', -- error code
NULL,
NULL,
NULL,
NULL,
1);
end;
在新会话中执行时有效的输出代码
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'TESTING_EXT_TAB',
credential_name => 'TEST_OBJ_STORE',
file_uri_list =>
'https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/rks6fos4/b/bucketuploads/o/testing_tab.csv',
format => json_object('delimiter' value ',','skipheaders' value '1'),
column_list => 'col1 varchar2(200)');
END;
知道我遗漏了什么或做错了什么吗?
【问题讨论】:
标签: oracle plsql external-tables execute-immediate dbms-output