2010-10-28 82 views
3

我的情景:甲骨文同義詞問題

  • 架構名稱:schema1
  • 包名:pkg_system
  • 過程名:PROC1

現在我想爲我的proc1創建一個同義詞,如下所示

CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1; 

...但它給了我語法錯誤。

ORA-00933: SQL command not properly ended 

我爲如下代碼:

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1; 

我可以成功地創建了同義詞,但是當我試圖通過同義詞執行存儲過程:

EXEC call_proc 

...得到以下錯誤:

ORA-06550: line 1, column 7: 
PLS-00201: identifier call_proc must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

而我使用模式名稱來調用像schema1.call_Proc這樣的過程仍然有同樣的錯誤。

我在這裏做錯了什麼?

+0

是不是它「創建公共同義詞」(單數)? – Phil 2010-10-28 00:25:00

+0

抱歉說錯了。現在將其更改爲單數。 – niceApp 2010-10-28 00:32:54

+0

我永遠不會明白爲什麼人們爲非工作代碼「輸入」代碼問題。 – Phil 2010-10-28 00:59:08

回答

4

一種方法來繞過這個限制,假設你真的需要調用具有一個名稱的程序(無論何種原因),你可以將它包裝在一個架構級的過程:

CREATE PROCEDURE schema1.proc1 IS 
BEGIN 
    pkg_system.proc1; 
END; 

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1; 
4

here

限制在FOR子句 架構對象不能包含在一個包中。

換句話說,您不能爲包過程創建同義詞。

我見過創建包裝程序(非包裝)併爲此創建公共同義詞的解決方案。

+2

如果你做了select * from dba_synonyms where synonym_name ='FRED';你會看到CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;在模式PKG_SYSTEM中創建對象「PROC1」的同義詞(即使沒有該名稱的用戶/模式)。 – 2010-10-28 01:24:10

+0

我還沒有出售,爲什麼你需要一個同義詞。爲什麼不只有一個引用合適模式的包裝程序? – 2010-10-28 02:50:13