存储编译报错
字符转日期也不是你那种用法啊,应该用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不就好了,其他的,你再自己看看吧