CREATE OR REPLACE Procedure test
(param IN varchar2)
ASiCount  integer;
BEGIN
    SELECT COUNT(*) INTO iCount FROM tbname WHERE fieldname='001';
    IF iCount > 0 THEN
      UPDATE tbname SET ....;
    ELSE
      INSERT INTO tbname() VALUES ();
    END IF;
    COMMIT;
END TEST;

解决方案 »

  1.   

    CREATE OR REPLACE Procedure test
    (param IN varchar2)
    ASiCount  integer;
    BEGIN
        SELECT COUNT(*) INTO iCount FROM tbname WHERE fieldname='001';
        IF iCount > 0 THEN
          UPDATE tbname SET ....;
        ELSE
          INSERT INTO tbname() VALUES ();
        END IF;
        COMMIT;
    END TEST;
      

  2.   

    CREATE OR REPLACE Procedure test
    (param IN varchar2)
    ASiCount  integer;
    BEGIN
        UPDATE tbname SET ....;    IF SQL%NOTFOUND THEN    
          INSERT INTO tbname() VALUES ();
        END IF;
        COMMIT;
    END TEST;
      

  3.   

    kzy7517,我觉的你这个过程,好像有点问题,SQL是一个游标名吗?  %NOTFOUND是一个游标属性,不是游标不能这个用!
      

  4.   

    SQL%NOTFOUND没有错啊 oracle的所有的SQL语句都默认为一个游标来处理,看来你的基础不够扎实,oracle的东西很多啊,多看看书把基础打扎实,才好
      

  5.   

    当我发出这个贴子的时候,就知道自已犯了一个愚蠢的错误!呵呵,谢谢andzen的提醒!!!!!
      

  6.   

    CREATE OR REPLACE Procedure test
    (param IN varchar2)
    AS
    iCount  integer;
    BEGIN
        select count(*) into iCount from col where tname = upper('tbname') and cname = upper('001')    
        IF iCount > 0 THEN
          UPDATE tbname SET ....;
        ELSE
          INSERT INTO tbname() VALUES ();
        END IF;
    END TEST;
      

  7.   

    为啥要select count(*) into iCount from col where tname = upper('tbname') and cname = upper('001')?多此一举。
    Oracle最基本的写法:
    直接UPDATE,没有更新到记录时,再插入就可以了。