2017-01-02 9 views
1

私はdoLoginという関数を持っています。これは2つの引数を受け取り、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

関連する問題