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