2017-01-02 1 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