溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

存儲(chǔ)過(guò)程訪問(wèn)其他用戶的表的問(wèn)題

發(fā)布時(shí)間:2020-08-07 14:39:29 來(lái)源:ITPUB博客 閱讀:188 作者:zchbaby2000 欄目:關(guān)系型數(shù)據(jù)庫(kù)

今天寫(xiě)了一個(gè)存儲(chǔ)過(guò)程,需要通過(guò)dblink把其他用戶下面的表的數(shù)據(jù)增量copy到目標(biāo)表中,結(jié)果訪問(wèn)其他系統(tǒng)的表的時(shí)候,在存儲(chǔ)過(guò)程中一直有問(wèn)題,在Stack Overflow中找到了答案。


In stored procedures, functions, and definers-rights packages, roles (such as  SELECT_CATALOG_ROLE ) are disabled. Therefore,  such a PL/SQL program can only fetch metadata for objects in its own schema . If you want to write a PL/SQL program that fetches metadata for objects in a different schema (based on the invoker's possession of SELECT_CATALOG_ROLE ), you must make the program invokers-rights.

To do this, you must add  authid  to your procedure.

create procedure tests authid CURRENT_USER is
  l_foo clob;beginselectregexp_replace(
  dbms_metadata.get_ddl('USER', 'SCOTT', null) ||
  dbms_metadata.GET_GRANTED_DDL ('SYSTEM_GRANT', 'SCOTT') ||
  dbms_metadata.GET_GRANTED_DDL ('OBJECT_GRANT', 'SCOTT') ||
  dbms_metadata.GET_GRANTED_DDL ('ROLE_GRANT', 'SCOTT'),'"' || chr(10), '";' || chr(10)) into l_foo 
from dual;end;/SQL> EXEC tests 
PL/SQL procedure successfully completed


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI