![](/img/trans.png)
[英]Create stored procedure with table from another schema throws PLS-00201
[英]Getting PLS-00201 when trying to access another schema table
我想清除SCHEMA_ADM和SCHEMA_DAT表上的一些數據,但是,我的過程需要存儲在SCHEMA_DAT上,並由SCHEMA_APP調用。 我做了這樣的程序:
create or replace PACKAGE BODY "PKG_CLEANING_THE_MESS"
AS
PROCEDURE PRC_DELETE_DATA (some variables...)
AS
TYPE fooTableType
IS TABLE OF FOO_TABLE.ID%TYPE; --TABLE ON SCHEMA_DAT. Works fine!
fooTable fooTableType;
TYPE xyzTableType
IS TABLE OF XYZ_TABLE.ID%TYPE; --TABLE ON SCHEMA_ADM. The problem is here!!!
xyzTable xyzTableType;
...
END PRC_DELETE_DATA;
...
END PKG_CLEANING_THE_MESS;
當我嘗試編譯時,給我
PLS-00201:必須聲明標識符“ XYZ_TABLE”。
我嘗試了“ SCHEMA_ADM”。“ XYZ_TABLE”,而不僅僅是“ XYZ_TABLE”,但是也沒有用。 SCHEMA_DAT對SCHEMA_ADM具有SIUD角色,對XYZ_TABLE具有SYNONYM,但是進行研究后發現存儲過程不能使用角色授予。 但是我沒有找到任何方法來授予PROCEDURE上的授權以進行編譯而不會出錯,並確保SCHEMA_APP也可以調用該過程。 有什么幫助嗎? 謝謝!
編輯:我發現了類似的問題 ,問了4年前,但沒有一個明確的答案:/
此錯誤的清單應類似於:
XYZ_TABLE
是否存在? (您拼寫正確嗎?實際上是用雙引號將其命名為"xyz_table"
或"XYZ Table"
嗎?) SCHEMA_ADM
? SCHEMA_DAT
? Y
可能有同義詞X
,但代碼引用了Y
) SCHEMA_DAT.XYZ_TABLE
? SCHEMA_DAT
)? 這可能會導致命名沖突,編譯器會在其中找到包而不是架構,然后在其中查找XYZ_TABLE
。 您的要求可能會有所不同,但是創建同義詞通常比對模式名稱進行硬編碼(鍵入少,如果情況發生變化,靈活性更大)更好,並且私有同義詞比公共同義詞更可取(安全性,因為它們不會廣播您的模式)結構,如果您想將不同的用戶定向到不同的對象,或者以后添加具有不同要求的另一個架構,則更加靈活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.