2017-01-02 101 views
1

所以我有一個名爲doLogin的函數,它接收兩個參數,並創建了一個名爲user_login的用戶。 我已授予USER_LOGIN以下特權:如何從系統運行功能?

GRANT CREATE SESSION TO user_login; 
GRANT EXECUTE ON DoLogin TO user_login; 
GRANT SELECT ON Utilizadores TO user_login; --do Login gets information from this table 

但使用USER_LOGIN並嘗試連接時運行的功能,我收到以下錯誤:

Erro: java.sql.SQLException: ORA-06550: line 1, column 13: PLS-00201: identifier 'DOLOGIN' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored

編輯:我想,只有系統和user_login已接入此功能

+0

也許你需要使用SCHEMA.DoLogin調用它,還是定義一個公共同義詞? – Aleksej

+0

我該怎麼做? – Safirah

+0

@Aleksej我已經嘗試過了:'ALTER SESSION SET CURRENT_SCHEMA = user_login' – Safirah

回答

2

假定您在您的架構中定義了您的功能DoLogin(例如yourSchema),並且您需要在不同的用戶中使用它,例如user_login

您可能會決定調用函數與

yourSchema.DoLogin 

或創建一個公共同義詞,從yourSchema內,然後調用函數不添加架構名稱:

create public synonym DoLogin for DoLogin 
+0

非常感謝您的回答!這確實解決了我的問題,但可以更好地解釋什麼是同義詞,我已經看到這個問題:http://stackoverflow.com/questions/2364818/when-should-database-synonyms-be-used,但我不是真的瞭解 – Safirah

+0

順便說一下,創建的同義詞對所有用戶都是可訪問的(如果是這樣,那不是我想要的) – Safirah

+1

如果創建公共同義詞,它將對每個用戶都可見,只有具有EXECUTE特權的用戶纔可以運行該功能。換句話說,您可以將公有同義詞視爲避免編寫SCHEMA.object的一種方式,但他們不會授予 – Aleksej