您的位置:程序门 -> oracle -> 高级技术



救命啊,关于oracle存储过程中判断表中的记录是否存在的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


救命啊,关于oracle存储过程中判断表中的记录是否存在的问题[已结贴,结贴人:yhdzfl]
发表于:2008-01-29 16:49:58 楼主
关于oracle存储过程的问题  
我用select   count(*)   into   n_a   from   student
就是if   n_a   =   0   then   print(a)else   print(b);
但是当n_a   不等于0的时候,他执行的是print(a)这个是什么原因啊?
发表于:2008-01-29 17:24:131楼 得分:10
有为空的情况吧?

发表于:2008-01-29 17:40:332楼 得分:0
具体的原因我不知道,也不知道是什么原理,如果有知道的请告知,但我找到了解决这个问题的方法了,顺便放上来给大家共享下
这里似乎不能识别“if   n_a   =   0   then       ”这个语句,但是能识别“if   n_a   >   0   then       ”
发表于:2008-01-29 19:00:483楼 得分:10
create     table   test

  id   number,
  name   varchar(10),
  major   varchar(10)
)
create   sequence   my_seq
insert   into   test   values(my_seq.nextval,'jiaxin','computer')
commit;

declare  
v_count   number;
begin
select   count(*)   into   v_count   from   test;
if   v_count   =0   then
dbms_output.put_line('ok');
else
dbms_output.put_line('null');
end   if;
end;

没有问题~~~
发表于:2008-01-30 09:46:254楼 得分:20
先初始化吧,然后直接打印出n_a来看看
发表于:2008-02-02 16:42:135楼 得分:0
:)最终的原因我找到了,还是我以前的项目经理提醒我的,值都先初始化过了,最主要的是if语句中要加上begin...end;才是规范的语句。加上后问题全都解决了。。。。
发表于:2008-02-02 16:51:416楼 得分:0
对于三楼的说没有问题,是因为我的举例也不够明确,如果if语句中的执行语句只有单条是没有问题的,如果是多条的话,就有问题了。。例如把你这个过程改成下面这种,你试试看,绝对有问题的。。
create           table       test  
(  
    id       number,  
    name       varchar(10),  
    major       varchar(10)  
)  
create       sequence       my_seq  
insert       into       test       values(my_seq.nextval,'jiaxin','computer')  
commit;  

declare      
n_count       number;
v_status     varchar2(5);
begin  
n_count   :=   0;
v_status   :=   '';
select       count(*)       into       v_count       from       test;  
    if       v_count       =0       then  
        v_status   =   'ok!   recorders   count:'   &   v_count
        dbms_output.put_line(v_status);  
    else
        v_status   =   'null';  
        dbms_output.put_line(v_status);  
    end     if;  
end;  
发表于:2008-02-02 16:56:007楼 得分:0
正确的应该是如下:
           
n_count   number;  
v_status   varchar2(5);  
begin      
n_count   :=   0;  
v_status   :=   '';  
select   count(*)   into   v_count   from   test;      
        if   v_count   =   0   then
            begin
                v_status   =   'ok!   recorders   count:'   &   v_count  
                dbms_output.put_line(v_status);  
            end;  
        else  
            begin
                v_status       =       'null';      
                dbms_output.put_line(v_status);  
            end;    
        end   if;      
end;      
发表于:2008-02-02 18:33:098楼 得分:80
v_status       =       'ok!       recorders       count:'       &       v_count    
----------------------------------
严重错误:
1、没有分号“;”;
2、赋值语句是“:=”,不是“=”。

准确语句:
v_status   :=   'ok!   recorders   count:'   ¦ ¦   v_count;
发表于:2008-02-25 12:44:339楼 得分:0
谢谢指出错误:),一时大意写错了,呵呵。


快速检索

最新资讯
热门点击