Plsql 动态Sql,绑定问题

Plsql 动态Sql,绑定问题,plsql,dynamic-sql,Plsql,Dynamic Sql,我有一个街区: DECLARE stmnt VARCHAR2(100); rol VARCHAR2(10); --role name tab_name VARCHAR2(10); --table name BEGIN rol := '&Role_name'; stmnt := 'create role ' || rol; EXECUTE IMMEDIATE stmnt; stmnt := 'grant :p on ' || '&tab_name' ||

我有一个街区:

DECLARE
  stmnt VARCHAR2(100);
  rol VARCHAR2(10); --role name
  tab_name VARCHAR2(10); --table name
BEGIN
  rol := '&Role_name';
  stmnt := 'create role ' || rol;
  EXECUTE IMMEDIATE stmnt;
  stmnt := 'grant :p on ' || '&tab_name' || ' to ' || rol;
  EXECUTE IMMEDIATE stmnt using '&Privilege';
END;
当我执行此块时,在重新设置特权选择后,Oracle会给我一个错误,即缺少或无效特权
ORA-00990:缺少或无效特权


为什么不绑定变量?

不能绑定Oracle名称,只能绑定数据值。改为这样做:

DECLARE
  stmnt VARCHAR2(100);
  rol VARCHAR2(10); --role name
  tab_name VARCHAR2(10); --table name
BEGIN
  rol := '&Role_name';
  stmnt := 'create role ' || rol;
  EXECUTE IMMEDIATE stmnt;
  stmnt := 'grant &Privilege. on &tab_name. to ' || rol;
  EXECUTE IMMEDIATE stmnt;
END;