Discussions
Categories
- 196.7K All Categories
- 2.2K Data
- 235 Big Data Appliance
- 1.9K Data Science
- 449.8K Databases
- 221.6K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 549 MySQL Community Space
- 477 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 532 SQLcl
- 4K SQL Developer Data Modeler
- 186.9K SQL & PL/SQL
- 21.3K SQL Developer
- 295.4K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.1K Development Tools
- 104 DevOps
- 3.1K QA/Testing
- 645.9K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 153 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 17 Java Essentials
- 158 Java 8 Questions
- 85.9K Java Programming
- 79 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.2K Java SE
- 13.8K Java Security
- 203 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 395 LiveLabs
- 37 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.6K Other Languages
- 2.3K Chinese
- 170 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 230 Portuguese
GRANT IN STORED DATABASE PROCEDURE

Ahamed Rafeeque
Member Posts: 154 Bronze Badge
Can i use GRANT IN STORED DATABASE PROCEDURE?
I got an error while i am trying this code
PROCEDURE PGRANT(FROMUSER Varchar2,TOUSER VARCHAR2,PCOL VARCHAR2) IS
CURSOR MTab IS
Select TABLE_NAME From SYS.DBA_TAB_COLUMNS Where OWNER=FROMUSER AND COLUMN_NAME=PCOL;
TYPE MTab_Type IS Table Of MTab%RowType Index By Binary_Integer;
MTable MTab_Type;
MSql Varchar2(4000);
BEGIN
Open MTab;
Loop
FETCH MTab BULK COLLECT INTO MTable LIMIT 10000;
Exit When MTab%NOTFOUND;
End Loop;
For i in 1..MTable.Count Loop
Msql:= 'Begin '||
' GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER||';'||
'End;';
EXECUTE IMMEDIATE MSQL;
End Loop;
END;
Error is
ERROR at line 1:
ORA-06550: line 1, column 8:
PLS-00103: Encountered the symbol "GRANT" when expecting one of the following:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
ORA-06512: at "TEMP.PGRANT", line 18
ORA-06512: at line 1
Any one please can help me?
Thanks,
Ahamed
I got an error while i am trying this code
PROCEDURE PGRANT(FROMUSER Varchar2,TOUSER VARCHAR2,PCOL VARCHAR2) IS
CURSOR MTab IS
Select TABLE_NAME From SYS.DBA_TAB_COLUMNS Where OWNER=FROMUSER AND COLUMN_NAME=PCOL;
TYPE MTab_Type IS Table Of MTab%RowType Index By Binary_Integer;
MTable MTab_Type;
MSql Varchar2(4000);
BEGIN
Open MTab;
Loop
FETCH MTab BULK COLLECT INTO MTable LIMIT 10000;
Exit When MTab%NOTFOUND;
End Loop;
For i in 1..MTable.Count Loop
Msql:= 'Begin '||
' GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER||';'||
'End;';
EXECUTE IMMEDIATE MSQL;
End Loop;
END;
Error is
ERROR at line 1:
ORA-06550: line 1, column 8:
PLS-00103: Encountered the symbol "GRANT" when expecting one of the following:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
ORA-06512: at "TEMP.PGRANT", line 18
ORA-06512: at line 1
Any one please can help me?
Thanks,
Ahamed
Best Answer
-
Ahamed Rafeeque wrote:GRANT is DDL and can not be executed from PL/SQL (dynamic or not). Change:
PLS-00103: Encountered the symbol "GRANT" when expecting one of the following:Msql:= 'Begin '|| ' GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER||';'|| 'End;';
toMsql:= 'GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER;
SY.
Answers
-
Ahamed Rafeeque wrote:GRANT is DDL and can not be executed from PL/SQL (dynamic or not). Change:
PLS-00103: Encountered the symbol "GRANT" when expecting one of the following:Msql:= 'Begin '|| ' GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER||';'|| 'End;';
toMsql:= 'GRANT SELECT, UPDATE, INSERT, DELETE ON '||FROMUSER||'.'||MTable(i).Table_Name||' TO '||TOUSER;
SY. -
You wrote:
"GRANT is DDL and can not be executed from PL/SQL (dynamic or not)."
Please reconsider your statementSQL*Plus: Release 10.2.0.2.0 - Production on Sun Jan 31 21:53:30 2010 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production With the Partitioning, Oracle Label Security, OLAP, Data Mining, Oracle Database Vault and Real Application Testing options Session altered. Session altered. SQL> BEGIN 2 execute immediate 'grant select on servers to scott'; 3 END; 4 / PL/SQL procedure successfully completed. SQL>
It seems you know this ... but it is not what you wrote.
This discussion has been closed.