如何从Schema B调用存储过程,在Schema A中创建DBMS_CLOUD外部表?
解决方案
要实现从Schema B调用Schema A的存储过程,同时在Schema A中创建外部表,按以下步骤操作:
- 恢复存储过程的默认权限模式:去掉存储过程定义中的
AUTHID CURRENT USER,使用默认的AUTHID DEFINER。这样存储过程执行时会以Schema A的身份运行,拥有Schema A的权限。 - 给Schema B授予存储过程执行权限:执行以下SQL语句,让Schema B能调用Schema A的存储过程:
GRANT EXECUTE ON schema_a.your_procedure_name TO schema_b; - 在存储过程中明确指定Schema A的表名:调用
dbms_cloud.create_external_table时,给table_name参数加上Schema A的前缀,确保表创建在Schema A下。修改后的代码示例:dbms_cloud.create_external_table( table_name => 'SCHEMA_A.' || l_table_name, credential_name => p_credential_name, file_uri_list => l_obs_url, format => '{"type":"parquet", "schema": "first"}' ); - 确认Schema A的权限充足:确保Schema A拥有
CREATE TABLE权限,以及EXECUTE ON dbms_cloud权限,同时存储过程能访问指定的credential(如果credential属于Schema A,默认即可访问;如果属于其他用户,需要授予对应访问权限)。
内容的提问来源于stack exchange,提问作者Suhel
相关产品推荐
相关产品推荐

