存儲編譯報錯
字元轉日期也不是你那種用法啊,應該用to_date,最後改成如下這樣:
executeimmediate'>to_date(''2017-05-07'',''yyyy-mm-dd'')';
② oracle存儲過程編譯錯誤 PLS-00103: Encountered the symbol "IF" when expecting one of the following
存儲過程中的select用於賦變數值,你寫完整試試
③ 創建存儲過程報錯如下: 警告: 創建的過程帶有編譯錯誤。
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;
④ 編譯存儲過程時出現Ora-04021錯誤的如何解決
編譯的存儲過程的時候,程序死住,等待一會出現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 bwhere a.SID = b.SID得到死鎖session的SID,SERIAL#參看這個是否為你自己用戶下的,然後kill掉session2.可能被掛起查看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 requestfrom dba_ddl_lockswhere name = '&your_package_name'
⑤ oracle存儲過程編譯錯誤,誰幫忙看看
oracle用dbms_output.put_line來列印
比如:
str:='執行成功';
dbms_output.put_line(str);
然後就能列印了,還有,你好多地方寫的都不對,比如lx已經是輸入參數了,為啥還要v_lx := lx;直接引用lx不就好了,其他的,你再自己看看吧