我要在存储过程里比较两个字符串是否相等   s1=name AND s2=word
可以这样写么?? 为什么出错呢 

解决方案 »

  1.   


    对啊!Oracle比较字符串没错,肯定是别的哪里出错了!
      

  2.   

    你的代码是什么:
    SQL> declare
      2    s1 varchar2(100);
      3    s2 varchar2(100);
      4    name varchar2(100);
      5    word varchar2(100);
      6  begin
      7    s1 := 'hello';
      8    s2 := 'name';
      9    name := 'hello';
     10    word := 'name';
     11    if s1=name and s2=word then 
     12      dbms_output.put_line('ok');
     13    else
     14      dbms_output.put_line('error');
     15    end if;
     16  end
     17  ;
     18  /
    okPL/SQL 过程已成功完成。SQL> ed
    已写入 file afiedt.buf  1  declare
      2    s1 varchar2(100);
      3    s2 varchar2(100);
      4    name varchar2(100);
      5    word varchar2(100);
      6  begin
      7    s1 := 'hello';
      8    s2 := 'name';
      9    name := 'hello';
     10    word := 'name1';
     11    if s1=name and s2=word then
     12      dbms_output.put_line('ok');
     13    else
     14      dbms_output.put_line('error');
     15    end if;
     16  end
     17* ;
    SQL> /
    errorPL/SQL 过程已成功完成。
      

  3.   

    CREATE PROCEDURE MyLog(name IN varchar,word IN varchar,res OUT int,acce OUT char) IS
    s1 varchar(30);
    s2 varchar(30);
    S3 char(10);
    CURSOR cur IS
    SELECT username,password,acces FROM UserLog;
    BEGIN
    OPEN cur;
    FETCH cur INTO s1,s2,s3;
      LOOP
    IF s1=name AND s2=word THEN
    acce:=s3;
    res:=1; return;EXIT;
    ELSE 
    IF s1=name AND s2!=word THEN 
    res:=-1; acce:='';END IF;return;EXIT;
    END IF;
    res:=0; acce:='';return;EXIT;
    IF cur%NOTFOUND THEN EXIT;
    END IF;
    END LOOP;
    CLOSE cur;
    END;创建成功了  我在java里面调用的 时候 传入相同字符串 
    但是 返回值res =0;有没有会调试存储过程的  帮忙看看问题出在什么地方??
    不胜感激!!
      

  4.   

    create table UserLog(username varchar2(10),password varchar2(10),acces varchar2(10));
    CREATE OR REPLACE PROCEDURE MyLog(name IN varchar,word IN varchar,res OUT int,acce OUT char) IS
      s1 varchar(30); 
      s2 varchar(30); 
      S3 char(10); 
      CURSOR cur IS 
      SELECT username,password,acces FROM UserLog; 
    BEGIN 
      OPEN cur; 
      FETCH cur INTO s1,s2,s3; 
      LOOP
        exit when cur%notfound;
        IF s1=name AND s2=word THEN 
          acce:=s3; 
          res:=1; 
          return;
          exit;
        end if;
        IF s1=name AND s2!=word THEN 
          res:=-1; acce:='';
          return;
          exit;
        END IF;
      END LOOP; 
      CLOSE cur; 
      res:=0; acce:=''; 
      return;
    END;
    SQL> insert into UserLog values('zxf','ddd','dddd');已创建 1 行。SQL> commit;提交完成。SQL>  declare
      2     res varchar2(10);
      3     acces varchar2(10);
      4   begin
      5     mylog('zxf','ddd',res,acces);
      6     dbms_output.put_line(res||'    '||acces);
      7   end;
      8  /
    1    ddddPL/SQL 过程已成功完成。SQL> declare
      2    res varchar2(10);
      3    acces varchar2(10);
      4  begin
      5    mylog('zxf','ddd33',res,acces);
      6    dbms_output.put_line(res||'    '||acces);
      7  end;
      8  /
    -1PL/SQL 过程已成功完成。
      

  5.   

    SQL> declare 
      2    s1 varchar2(100); 
      3    s2 varchar2(100); 
      4    name varchar2(100); 
      5    word varchar2(100); 
      6  begin 
      7    s1 := 'hello'; 
      8    s2 := 'name'; 
      9    name := 'hello'; 
    10    word := 'name'; 
    11    if s1=name and s2=word then 
    12      dbms_output.put_line('ok'); 
    13    else 
    14      dbms_output.put_line('error'); 
    15    end if; 
    16  end 
    17  ; 
    18  /