存儲過程ora00900
A. 錯誤ora 00900 06512
可能是沒有許可權。雖然當前用戶執行語句是有許可權的,但是放到存儲過程中就必須要顯式的賦個許可權給當前用戶。以下參考
【IT168 技術文檔】我們知道,用戶擁有的role許可權在存儲過程是不可用的。如:
sql> select * from dba_role_privs where grantee='SUK';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------ ------------ ------------ ------------
SUK DBA NO YES
SUK CONNECT NO YES
SUK RESOURCE NO YES
--用戶SUK擁有DBA這個role
--再創建一個測試存儲過程:
create or replace procere p_create_table
is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--然後測試
SQL> exec p_create_table;
begin p_create_table; end;
ORA-01031: 許可權不足
ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
ORA-06512: 在line 1
--可以看到,即使擁有DBA role,也不能創建表。role在存儲過程中不可用。
--遇到這種情況,我們一般需要顯式進行系統許可權,如grant create table to suk;
--但這種方法太麻煩,有時候可能需要進行非常多的授權才能執行存儲過程
--實際上,oracle給我們提供了在存儲過程中使用role許可權的方法:
--修改存儲過程,加入Authid Current_User時存儲過程可以使用role許可權。
create or replace procere p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--再嘗試執行:
SQL> exec p_create_table;
PL/SQL procere successfully completed
--已經可以執行了。
B. ORA-00900: 無效 SQL 語句
帖這東西沒用
把你那個sql貼出來
-----------
String sql = "intsert into students values(?,?,?,?)";
你這幾個問號是什麼啊?是參數也沒參數,光插問號的話類型可能還不符合呢
C. 存儲過程一直報錯 但是編譯成功了 也沒有錯 調用時一直不成功報錯
下面是問題:
Oraclede 環境中,客戶那邊提出,執行存儲過程時出錯,信息:DBCustomException: ORA-00900: invalid SQL statement
關於這個問題之前也遇到過,一直找不到原因,沒解決,時好時壞,,由於客戶大部分是SQL Server,也就沒太在意,現在終於麻煩來了。
我用自己創建的用戶,通過P/L SQL 登陸,執行以下語句
--創建表
create table ttt
(
aa varchar(20)
)
--創建存儲過程
CREATE OR REPLACE PROCEDURE myproc
AS BEGIN
select * from ttt;
END
--執行
exec myproc
執行存儲過程時,開始報錯:ORA-00900:無效SQL語句 (上面那個錯誤的中文版-_-!)
這時候看右邊的存儲過程如下,有個紅叉,