儲存過程中遇到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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL--儲存過程與檢視MySql儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- 如何把SQL Server中一個表,一個儲存過程,一個檢視等改為系統表,系統儲存過程,系統檢視等...SQLServer儲存過程
- 檢視、儲存過程以及許可權控制練習儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- jsp中呼叫儲存過程JS儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- EF中使用SQL語句或儲存過程SQL儲存過程
- MySQL 儲存過程進行切換表MySql儲存過程
- 瞭解使用mysql 的檢視、儲存過程、觸發器、函式....MySql儲存過程觸發器函式
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- Oracle儲存過程Oracle儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- MySQL---------儲存過程MySql儲存過程
- 造數儲存過程儲存過程
- linux呼叫儲存過程Linux儲存過程
- Oracle儲存過程-1Oracle儲存過程
- 儲存過程——遊標儲存過程
- Winform呼叫儲存過程ORM儲存過程
- 儲存過程 傳 datatable儲存過程
- mysql儲存過程整理MySql儲存過程
- JAVA儲存過程(轉)Java儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- MySQL之儲存過程MySql儲存過程
- oracle的儲存過程Oracle儲存過程
- 用於檢視配置的儲存過程 | 全方位認識 sys 系統庫儲存過程
- 恢復MySQL資料庫建立儲存過程是遇到錯誤MySql資料庫儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 2020重新出發,MySql基礎,MySql檢視&索引&儲存過程&觸發器MySql索引儲存過程觸發器