procedure sc_numberbiao(use_sno char, use_number char) is
have number; --用于确定是否存在表SC_NUMBER
cnumber number; --已有课程数量
excp_number exception; --自定义异常,用于确认用户选课熟练是否达到已有课程上限
begin
select count(*) into cnumber from course ;
if use_number > cnumber or use_number < 0 then
raise excp_number;
end if;
select count(*) into have from user_tables where table_name = 'SC_NUMBER';
if have <> 0 then
execute immediate 'update sc_number set cnonumber = use_number where sno = use_sno';
if sql%rowcount = 0 then
execute immediate 'insert into sc_number values (trim(use_sno), trim(use_number))';
dbms_output.put_line('插入学号为' || use_sno || '的学生选课门数为' ||
use_number);
else
dbms_output.put_line('更新学号为' || use_sno || '的学生选课门数为' ||
use_number);
end if;
else
execute immediate 'create table sc_number(sno char(20),cnonumber char(3))';
execute immediate 'insert into sc_number values (trim(use_sno), trim(use_number))';
dbms_output.put_line('建表sc_number并且插入学号为' || use_sno || '的学生选课门数为' ||
use_number);
end if;
commit;
exception
when excp_number then
dbms_output.put_line('现在共有' || cnumber || '门课程可供选择,用户输入' ||
use_number || '不合法');
end sc_numberbiao;
这段代码是想实现建立过程,当传入学号和选课门数,首先判断SC_Number表是否存在,若不存在则创建该表格(包括学号和选修门数两列),将传入值插入或修改到SC_Number表中(该生不存在则插入,若存在则修改其选课门数)。
但是测试总有这样那样的问题,比如列在此处不允许啊之类的问题,有些语句不能使用也只能改成动态SQL了,求高手帮忙看下程序,到底是哪些地方出问题了,头都大了- -
have number; --用于确定是否存在表SC_NUMBER
cnumber number; --已有课程数量
excp_number exception; --自定义异常,用于确认用户选课熟练是否达到已有课程上限
begin
select count(*) into cnumber from course ;
if use_number > cnumber or use_number < 0 then
raise excp_number;
end if;
select count(*) into have from user_tables where table_name = 'SC_NUMBER';
if have <> 0 then
execute immediate 'update sc_number set cnonumber = use_number where sno = use_sno';
if sql%rowcount = 0 then
execute immediate 'insert into sc_number values (trim(use_sno), trim(use_number))';
dbms_output.put_line('插入学号为' || use_sno || '的学生选课门数为' ||
use_number);
else
dbms_output.put_line('更新学号为' || use_sno || '的学生选课门数为' ||
use_number);
end if;
else
execute immediate 'create table sc_number(sno char(20),cnonumber char(3))';
execute immediate 'insert into sc_number values (trim(use_sno), trim(use_number))';
dbms_output.put_line('建表sc_number并且插入学号为' || use_sno || '的学生选课门数为' ||
use_number);
end if;
commit;
exception
when excp_number then
dbms_output.put_line('现在共有' || cnumber || '门课程可供选择,用户输入' ||
use_number || '不合法');
end sc_numberbiao;
这段代码是想实现建立过程,当传入学号和选课门数,首先判断SC_Number表是否存在,若不存在则创建该表格(包括学号和选修门数两列),将传入值插入或修改到SC_Number表中(该生不存在则插入,若存在则修改其选课门数)。
但是测试总有这样那样的问题,比如列在此处不允许啊之类的问题,有些语句不能使用也只能改成动态SQL了,求高手帮忙看下程序,到底是哪些地方出问题了,头都大了- -
解决方案 »
- 各位大侠meger into 是否可以开分枝? 解决了膜拜您!!!!!~~~
- oraclehome90agent服务问题
- ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- 小弟用的是Oracle客户端。在SQL PLUS中输入的用户名称、主机字符串和口令都没问题,为什么一点“确定”就“未响应”啊?
- 包名长度有限制吗?
- sql语句,简单问题,急,解决马上给分。
- Oracle 9.0.2 在 RedHat 9.0 下如何启动和备份?
- 如何写程序将access里的数据导入到oracle里?
- 控制文件恢复
- 关于在PROCEDURE中灵活实现ORDRE BY的问题,请各位在虾帮忙
- 去重复报ORA-00913: too many values 。。。
- refcursor not supported问题
procedure sc_numberbiao(use_sno char, use_number char)
is
have number; --用于确定是否存在表SC_NUMBER
cnumber number; --已有课程数量
excp_number exception; --自定义异常,用于确认用户选课熟练是否达到已有课程上限
begin
select count(*) into cnumber from course ;
if use_number > cnumber or use_number < 0 then
raise excp_number;
end if;
select count(*) into have from user_tables where table_name = 'SC_NUMBER';
if have <> 0 then
execute immediate 'update sc_number set cnonumber = :1 where sno = :2'
using use_number,use_sno;
if sql%rowcount = 0 then
execute immediate 'insert into sc_number values (:1,:2)' using use_sno, use_number;
dbms_output.put_line('插入学号为' || use_sno || '的学生选课门数为' || use_number);
else
dbms_output.put_line('更新学号为' || use_sno || '的学生选课门数为' || use_number);
end if;
else
execute immediate 'create table sc_number(sno char(20),cnonumber char(3))';
execute immediate 'insert into sc_number values (:1,:2)' using use_sno, use_number;
dbms_output.put_line('建表sc_number并且插入学号为' || use_sno || '的学生选课门数为' || use_number);
end if;
commit;
exception when excp_number then
dbms_output.put_line('现在共有' || cnumber || '门课程可供选择,用户输入' || use_number || '不合法');
end sc_numberbiao;