求一个存储过程.存储过程的功能是:在表Temp1中插入一条记录.表Temp1的结构是PKID,UserName,UserQQ三个字段.存储过程要首先判断是否已经有相同的用户名了,如果有,不能插入,返回0,如果没有该用户名,则插入该记录.并且返回该用户的PKID.PKID是自动增加的标识符.我在Oracle中有一个aaa的序列.我写的存储过程是:
create or replace Insert_Ro(uname varchar2,uqq varchar2,flag out number)
as 
tempname temp1.username%type;
begin 
select username into tempname from temp1 where username=uname;
flag:=0;
exception
where NO_DATA_FOUND then 
begin 
insert into temp1 values(uname,uqq,aaa.nextval);
select aaa.currval into flag from dual;
end;
end Insert_Ro;
可是,插入时出现错误,请高手给个简单,并且容易理解的存储过程.谢谢了!

解决方案 »

  1.   

    /* Formatted on 2006/08/17 13:18 (Formatter Plus v4.8.6) */
    CREATE OR REPLACE PROCEDURE insert_ro (
       uname            VARCHAR2,
       uqq              VARCHAR2,
       flag       OUT   NUMBER
    )
    AS
       tempname   temp1.username%TYPE;
       v_count    INTEGER;
    BEGIN
       v_count := 0;   SELECT COUNT (username)
         INTO v_count
         FROM temp1
        WHERE username = uname;   IF v_count = 0
       THEN
          INSERT INTO temp1
               VALUES (uname, uqq, aaa.NEXTVAL);      flag := 1;
       ELSE
          flag := 0;
       END IF;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;
       WHEN OTHERS
       THEN
          NULL;
    END insert_ro;
      

  2.   

    create or replace Insert_Ro(uname varchar2,uqq varchar2,flag out number)
    as 
    tempname temp1.username%type;
    begin 
    select username into tempname from temp1 where username=uname;
    flag:=0;
    exception
      where NO_DATA_FOUND then 
        begin 
          select aaa.nextval into flag from dual;
          insert into temp1 values(uname,uqq,flag);
        end;end Insert_Ro;