我创建了一个程序
create or replace procedure dba_role
as
user varchar2(200);
ref varchar2(200);
begin
insert into dba_role_privs(grantee,granted_role) (select user as grantee,granted_role from dba_role_privs where grantee=ref);
end;
正在创建过程,但我无法执行该过程。我尝试了不同的方法通过传递参数来执行它,但没有任何效果。
有谁能告诉我如何在oracle live SQL中执行这个过程吗?要传递的参数都是字符串(varchar)
例如:* * 我尝试过"执行dba_role('alex ','hunter');**
错误为****ORA-06550:第1行,第7列:**PLS-00306:调用"DBA_ROLE"时参数的数目或类型错误
2条答案
按热度按时间az31mfrm1#
以及缺少您尝试传递的两个参数(参数应该出现在过程名后面的方括号中,如d r's answer中所述),但不能插入到DBA视图中。(除非您要将过程创建为SYS,但您永远不应该这样做,因为SYS是为Oracle内部保留的),并且您没有被授予INSERT权限,而且还因为它定义了多个连接和联合等,因此不是一个可更新的视图。即使它是,您的过程只指定了它的七列中的两列。
即使您确实具有权限并且可以更新,而且您提供了所有值,但直接更新内部数据字典表仍不受支持,并且可能会损坏数据库。如果要向角色授予权限,应使用GRANT命令:
为了撤销授权,
flseospp2#
上面是它的定义方式--使用两个VarChar 2参数。下面是它的调用方式:
您的代码的问题在于user和ref被声明为过程作用域内的变量(而不是参数),因此,当使用参数调用过程时(就像我上面所做的那样),您试图将两个参数传递给不接受任何参数的过程。***),则用户和引用都为空。