儲存過程中遇到ora-00942表或檢視不存在
儲存過程中遇到ora-00942表或檢視不存在
SQL> create or replace procedure system.opt is
2 begin
3 insert into system.fga_log_view_bak(
4 SESSION_ID ,
5 TSMP ,
6 DB_USER ,
7 OS_USER ,
8 USERHOST ,
9 CLIENT_ID ,
10 ECONTEXT_ID ,
11 EXT_NAME ,
12 OBJECT_SCHEMA ,
13 OBJECT_NAME ,
14 POLICY_NAME ,
15 SCN ,
16 SQL_TEXT ,
17 SQL_BIND ,
18 COMMENT$TEXT ,
19 STATEMENT_TYPE ,
20 EXTENDED_TIMESTAMP ,
21 PROXY_SESSIONID ,
22 GLOBAL_UID ,
23 INSTANCE_NUMBER ,
24 OS_PROCESS ,
25 TRANSACTIONID ,
26 STATEMENTID ,
27 ENTRYID )
28 select sessionid,
29 to_char( to_char ( CAST (
30 (FROM_TZ(ntimestamp#,'00:00') AT LOCAL) AS date
31 ), 'yyyy-mm-dd hh24:mi:ss')),
32 dbuid, osuid, oshst, clientid, auditid, extid,
33 obj$schema, obj$name, policyname, scn, to_nchar(substr(lsqltext,1,2000)),
34 to_nchar(substr(lsqlbind,1,2000)), comment$text,
35 DECODE(stmt_type,
36 1, 'SELECT', 2, 'INSERT', 4, 'UPDATE', 8, 'DELETE', 'INVALID'),
37 FROM_TZ(ntimestamp#,'00:00') AT LOCAL,
38 proxy$sid, user$guid, instance#, process#,
39 xid, statement, entryid
40 from sys.fga_log$;
41
42
43 if (SQL%ROWCOUNT<>0) then
44 delete from sys.fga_log$;
45 commit;
46 end if;
47 EXCEPTION
48 WHEN NO_DATA_FOUND THEN
49 RAISE_APPLICATION_ERROR(-20010, 'insert into fga_log_bak error!!!');
50 end opt;
51 /
Warning: Procedure created with compilation errors
SQL> show error
Errors for PROCEDURE SYSTEM.OPT:
LINE/COL ERROR
-------- -----------------------------------------------
40/12 PL/SQL: ORA-00942: table or view does not exist
3/1 PL/SQL: SQL Statement ignored
44/17 PL/SQL: ORA-00942: table or view does not exist
44/1 PL/SQL: SQL Statement ignored
sys.fga_log$ 是記錄fga審計記錄的基本表。
解決方法:
以sys身份登入,為system賦予select 和delete sys.fga_log$的許可權,否則下邊的儲存過程新增會有問題。
Sql> grant select ,delete on sys.fga_log$ to system;
原因:
後來查資料得知如果使用者有dba角色,角色裡包含的許可權在儲存過程裡不會被繼承;所以又單獨對tb_bil_acct_566 ,seq_bil_acct_his_hisid_566.nextval等作了顯式賦權,問題得以解決。
http://blog.csdn.net/zhangtian0913/archive/2009/03/09/3973484.aspx
[@more@]
SQL> create or replace procedure system.opt is
2 begin
3 insert into system.fga_log_view_bak(
4 SESSION_ID ,
5 TSMP ,
6 DB_USER ,
7 OS_USER ,
8 USERHOST ,
9 CLIENT_ID ,
10 ECONTEXT_ID ,
11 EXT_NAME ,
12 OBJECT_SCHEMA ,
13 OBJECT_NAME ,
14 POLICY_NAME ,
15 SCN ,
16 SQL_TEXT ,
17 SQL_BIND ,
18 COMMENT$TEXT ,
19 STATEMENT_TYPE ,
20 EXTENDED_TIMESTAMP ,
21 PROXY_SESSIONID ,
22 GLOBAL_UID ,
23 INSTANCE_NUMBER ,
24 OS_PROCESS ,
25 TRANSACTIONID ,
26 STATEMENTID ,
27 ENTRYID )
28 select sessionid,
29 to_char( to_char ( CAST (
30 (FROM_TZ(ntimestamp#,'00:00') AT LOCAL) AS date
31 ), 'yyyy-mm-dd hh24:mi:ss')),
32 dbuid, osuid, oshst, clientid, auditid, extid,
33 obj$schema, obj$name, policyname, scn, to_nchar(substr(lsqltext,1,2000)),
34 to_nchar(substr(lsqlbind,1,2000)), comment$text,
35 DECODE(stmt_type,
36 1, 'SELECT', 2, 'INSERT', 4, 'UPDATE', 8, 'DELETE', 'INVALID'),
37 FROM_TZ(ntimestamp#,'00:00') AT LOCAL,
38 proxy$sid, user$guid, instance#, process#,
39 xid, statement, entryid
40 from sys.fga_log$;
41
42
43 if (SQL%ROWCOUNT<>0) then
44 delete from sys.fga_log$;
45 commit;
46 end if;
47 EXCEPTION
48 WHEN NO_DATA_FOUND THEN
49 RAISE_APPLICATION_ERROR(-20010, 'insert into fga_log_bak error!!!');
50 end opt;
51 /
Warning: Procedure created with compilation errors
SQL> show error
Errors for PROCEDURE SYSTEM.OPT:
LINE/COL ERROR
-------- -----------------------------------------------
40/12 PL/SQL: ORA-00942: table or view does not exist
3/1 PL/SQL: SQL Statement ignored
44/17 PL/SQL: ORA-00942: table or view does not exist
44/1 PL/SQL: SQL Statement ignored
sys.fga_log$ 是記錄fga審計記錄的基本表。
解決方法:
以sys身份登入,為system賦予select 和delete sys.fga_log$的許可權,否則下邊的儲存過程新增會有問題。
Sql> grant select ,delete on sys.fga_log$ to system;
原因:
後來查資料得知如果使用者有dba角色,角色裡包含的許可權在儲存過程裡不會被繼承;所以又單獨對tb_bil_acct_566 ,seq_bil_acct_his_hisid_566.nextval等作了顯式賦權,問題得以解決。
http://blog.csdn.net/zhangtian0913/archive/2009/03/09/3973484.aspx
[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/161195/viewspace-1050926/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ora-00942 儲存過程???儲存過程
- 儲存過程中查詢資料字典檢視(v$或dba)儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- mybatis呼叫檢視和儲存過程MyBatis儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- 檢視正在執行的儲存過程儲存過程
- 檢視和儲存過程相關物件儲存過程物件
- 儲存過程 檢視 觸發器 序列儲存過程觸發器
- 如何把SQL Server中一個表,一個儲存過程,一個檢視等改為系統表,系統儲存過程,系統檢視等...SQLServer儲存過程
- 用SQL server匯出到oracle,查詢時提示“表或檢視不存在ORA-00942”錯誤SQLServerOracle
- 儲存過程遇到gc cr request等待儲存過程GC
- mssql bcp 工具用法和檢視角色儲存過程SQL儲存過程
- 檢視、儲存過程以及許可權控制練習儲存過程
- DBMS_PROFILER 檢視儲存過程執行時間儲存過程
- 破解儲存過程,函式,檢視,觸發器解密儲存過程函式觸發器解密
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 常用查詢Oracle的表,檢視,儲存過程,使用者等SQL命令Oracle儲存過程SQL
- 通過v$access檢視正在執行的儲存過程procedure儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 在儲存過程中建立表的兩種方法儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- 基礎——使用檢視和儲存過程的優缺點儲存過程
- 檢視錶,儲存過程,觸發器定義的方法儲存過程觸發器
- 檢視錶、檢視、索引、儲存過程和觸發器的定義的方法索引儲存過程觸發器
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- 用儲存過程動態建立表儲存過程
- EF中使用SQL語句或儲存過程SQL儲存過程
- 更新大表中某個欄位的儲存過程儲存過程
- 【Database】Oracle10g檢視正在執行的儲存過程DatabaseOracle儲存過程
- 儲存過程儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 儲存過程中慎用 execute immediate儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程