簡體   English   中英

嘗試訪問另一個模式表時獲取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年前,但沒有一個明確的答案:/

此錯誤的清單應類似於:

  1. 表格XYZ_TABLE是否存在? (您拼寫正確嗎?實際上是用雙引號將其命名為"xyz_table""XYZ Table"嗎?)
  2. 是否在預期模式SCHEMA_ADM
  3. 是否將諸如SELECT之類的特權直接授予包所有者SCHEMA_DAT
  4. 是否存在預期名稱的私有或公共同義詞? (例如,表Y可能有同義詞X ,但代碼引用了Y
  5. 或者,代碼是否以模式名稱作為前綴(例如SCHEMA_DAT.XYZ_TABLE
  6. 是否有與架構同名的軟件包或類型( SCHEMA_DAT )? 這可能會導致命名沖突,編譯器會在其中找到包而不是架構,然后在其中查找XYZ_TABLE

您的要求可能會有所不同,但是創建同義詞通常比對模式名稱進行硬編碼(鍵入少,如果情況發生變化,靈活性更大)更好,並且私有同義詞比公共同義詞更可取(安全性,因為它們不會廣播您的模式)結構,如果您想將不同的用戶定向到不同的對象,或者以后添加具有不同要求的另一個架構,則更加靈活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM