procedure儲存過程呼叫dba字首的字典dba_objects
SQL> create or replace procedure proc_dba
2 as
3 v_obj dba_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from dba_objects where wner='SCOTT' and object_name='BASE_BILL';
5 begin
6 open cur_dba;
7 fetch cur_dba into v_obj;
8 exit when cur_dba%notfound;
9 close cur_dba;
10 end;
11 /
Warning: Procedure created with compilation errors
---儲存過程呼叫dba_objects報錯
SQL> show err
Errors for PROCEDURE SCOTT.PROC_DBA:
LINE/COL ERROR
-------- ------------------------------------------------------------------------------------
3/7 PLS-00201: identifier 'DBA_OBJECTS' must be declared
3/7 PL/SQL: Item ignored
4/43 PL/SQL: ORA-00942: table or view does not exist
4/19 PL/SQL: SQL Statement ignored
7/20 PLS-00320: the declaration of the type of this expression is incomplete or malformed
7/1 PL/SQL: SQL Statement ignored
8/1 PLS-00376: illegal EXIT/CONTINUE statement; it must appear inside a loop
8/1 PL/SQL: Statement ignored
SQL> ed
SQL>
SQL>
SQL>
SQL>
--把dba_objects改為user_objects則可以正確執行
SQL> create or replace procedure proc_dba
2 as
3 v_obj user_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from user_objects where wner='SCOTT' and object_name='BASE_BILL';
5 begin
6 open cur_dba;
7 fetch cur_dba into v_obj;
8 exit when cur_dba%notfound;
9 close cur_dba;
10 end;
11 /
Warning: Procedure created with compilation errors
SQL> show err
Errors for PROCEDURE SCOTT.PROC_DBA:
LINE/COL ERROR
-------- ------------------------------------------------------------------------
4/62 PL/SQL: ORA-00904: "OWNER": invalid identifier
4/19 PL/SQL: SQL Statement ignored
8/1 PLS-00376: illegal EXIT/CONTINUE statement; it must appear inside a loop
8/1 PL/SQL: Statement ignored
SQL> ed
SQL>
SQL> create or replace procedure proc_dba
2 as
3 v_obj user_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from user_objects where object_name='BASE_BILL';
5 begin
6 open cur_dba;
7 fetch cur_dba into v_obj;
8 exit when cur_dba%notfound;
9 close cur_dba;
10 end;
11 /
Warning: Procedure created with compilation errors
--exit必須包括在loop及end loop中
SQL> show err
Errors for PROCEDURE SCOTT.PROC_DBA:
LINE/COL ERROR
-------- ------------------------------------------------------------------------
8/1 PLS-00376: illegal EXIT/CONTINUE statement; it must appear inside a loop
8/1 PL/SQL: Statement ignored
SQL> ed
SQL>
SQL>
SQL> create or replace procedure proc_dba
2 as
3 v_obj user_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from user_objects where object_name='BASE_BILL';
5 begin
6 open cur_dba;
7 loop
8 fetch cur_dba into v_obj;
9 exit when cur_dba%notfound;
10 close cur_dba;
11 end loop;
12 end;
13 /
Procedure created
SQL> ed
SQL>
SQL>
SQL> create or replace procedure proc_dba
2 authid current_user is
3 v_obj dba_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from dba_objects where object_name='BASE_BILL' and wner='SCOTT';
5 begin
6 open cur_dba;
7 loop
8 fetch cur_dba into v_obj;
9 exit when cur_dba%notfound;
10 close cur_dba;
11 end loop;
12 end;
13 /
Warning: Procedure created with compilation errors
--新增選項authid current_user is依舊報dba_objects不存在
SQL> show err
Errors for PROCEDURE SCOTT.PROC_DBA:
LINE/COL ERROR
-------- ------------------------------------------------------------------------------------
3/7 PLS-00201: identifier 'DBA_OBJECTS' must be declared
3/7 PL/SQL: Item ignored
4/43 PL/SQL: ORA-00942: table or view does not exist
4/19 PL/SQL: SQL Statement ignored
8/20 PLS-00320: the declaration of the type of this expression is incomplete or malformed
8/1 PL/SQL: SQL Statement ignored
---以sysdba授權select any table
C:\Users\123>sqlplus as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 28 14:40:12 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> grant select any table to scott;
Grant succeeded.
SQL> create or replace procedure proc_dba
2 authid current_user is
3 v_obj dba_objects.OBJECT_NAME%type;
4 cursor cur_dba is select object_name from dba_objects where object_name='BASE_BILL' and wner='SCOTT';
5 begin
6 open cur_dba;
7 loop
8 fetch cur_dba into v_obj;
9 exit when cur_dba%notfound;
10 close cur_dba;
11 end loop;
12 end;
13 /
Warning: Procedure created with compilation errors
--授權select any table依舊報錯
SQL> show err
Errors for PROCEDURE SCOTT.PROC_DBA:
LINE/COL ERROR
-------- ------------------------------------------------------------------------------------
3/7 PLS-00201: identifier 'DBA_OBJECTS' must be declared
3/7 PL/SQL: Item ignored
4/43 PL/SQL: ORA-00942: table or view does not exist
4/19 PL/SQL: SQL Statement ignored
8/20 PLS-00320: the declaration of the type of this expression is incomplete or malformed
8/1 PL/SQL: SQL Statement ignored
--再把select on dba_objects授權
SQL> grant select on dba_objects to scott;
Grant succeeded.
這下可以了
SQL> /
Procedure created
小結:1,在儲存過程呼叫dba字首的資料字典,必須要顯式授權
grant select on dba_objects to scott;
2,授權dba字首的字典僅sysdba具備此權力,dba亦不夠
3,以sysdba授權select any table亦不可
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-754959/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- 呼叫儲存過程儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- jsp中呼叫儲存過程JS儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- 【DBA】Oracle dba角色不是萬能的,儲存過程需要顯示授權Oracle儲存過程
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- jdbc使用call呼叫儲存過程報錯JDBC儲存過程
- oracle的儲存過程Oracle儲存過程
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- 使用JPA和Hibernate呼叫儲存過程的最佳方法 - Vlad Mihalcea儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- MySQL之儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程