oracle中如何顯示編譯錯誤
① oracle創建的觸發器帶有編譯錯誤
告訴你兩點:
1、當出現警告或者錯誤的時候,使用show error 命令,可以查看錯誤的具體信息,在信息中可以定位錯誤的具體位置。
2、你的問題是:【endif;】不能寫在一起,【end if;】是正確的。
類似的還有【end loop】 等。
---
以上,希望對你有所幫助。
② oracle 編譯包的時候,一直提示正在編譯
編譯的存儲過程的時候,程序死住,等待一會出現ora-04021錯誤解決辦法:
1.可能被鎖住
查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b
where a.SID = b.SID
得到死鎖session的SID,SERIAL#參看這個是否為你自己用戶下的,然後kill掉session
2.可能被掛起
查看v$session_waitselect b.serial#,a.* from v$session_wait a,v$session
bwhere a.sid = b.sid得到等待的session的sid和serial#3.查看dba_ddl_locksselect
session_id sid, owner, name, type,
mode_held held, mode_requested request
from dba_ddl_locks
where name = '&your_package_name'
③ oracle 警告創建的過程帶有編譯錯誤
1. 創建完存儲過程(在命令行),可以用showerr看具體錯誤
2. 可以在PLsql中,輸入"全班排名", 然後俺右鍵->編輯,看到具體錯誤
3. 你的sql從from後一直到group by的分號;是多餘的,即便單獨在SQL窗口也會報錯
SQL應該改成
select b.學號,a.姓名, avg(a.成績) 平均分,sum(a.成績) 總分
from 成績信息表 a
join 學籍信息表 b on (a.學號=b.學號)
join 班級信息表 c on (c.班級號=b.班級號)
where c.班級名稱=class
group by b.學號
order by avg(成績) ,b.學號 desc;
4. 存儲過程不能直接用SQL,要用游標或select……into方式
比如:
create or replace procere 全班排名(
class in char(8)
)
as
cursor cur(p_class char(8)) is
select b.學號,a.姓名, avg(a.成績) 平均分,sum(a.成績) 總分
from 成績信息表 a
join 學籍信息表 b on (a.學號=b.學號)
join 班級信息表 c on (c.班級號=b.班級號)
where c.班級名稱=class
group by b.學號
order by avg(成績) ,b.學號 desc;
rs cur%rowtype;
begin
for rs in cur(class) loop
dbms_output.put_line(rs.學號||','||rs.姓名||','||rs.平均分||','||rs.總分);
end loop;
end;
④ Oracle使用merge into 編寫存儲過程 遇編譯錯誤:PL/SQL: ORA-00926: 缺失 VALUES 關鍵字
Oracle使用merge into 編寫存儲過程 遇編譯錯誤,是設置錯誤造成的,解決方法如下:
1、首先新建存儲過程,Create or ReplaceProcere CHK_SYS_EMP 檢查系統工號。
⑤ Oracle SQL*PLUS中設置trigger為何總是編譯錯誤
編譯錯誤一般是trigger的寫法有誤。
Oracle中trigger語法:
CREATE[ORREPLACE]TRIGGERtrigger_name
{BEFORE|AFTER}
{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}
[OR{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}...]
ON[schema.]table_name|[schema.]view_name
[REFERENCING{OLD[AS]old|NEW[AS]new|PARENTasparent}]
[FOREACHROW]
[WHENcondition]
PL/SQL_BLOCK|CALLprocere_name;
具體的內容需要根據需求來編寫。
⑥ 為什麼oracle 新建存儲過程時,出現「創建過程帶有編譯錯誤」 ,求大神們幫助。因為沒財富了,所以沒懸賞了
先不說別的,就是insert into後必須要提交,否則插不進數據造成表被鎖
再一個,你那倆參數ASSIGN_PK和CLASS_PK 是要輸入的么?
輸入的話要加上in,要不是輸入,在後邊取出的,至少也得賦值,這里就姑且當做你是要輸入的兩個參數吧。
create or replace procere add_t
(ASSIGN_PK IN VARCHAR2 ,
CLASS_PK IN VARCHAR2)
IS
BEGIN
INSERT INTO add_t values(''||ASSIGN_PK||'',''||CLASS_PK||'');
commit;
END;