我采用下列语句调用时发现,系统老是执行这条语句.
insert into sales(CTNO, CUSTOMER)       values(CTNOS, CUSTOMER);
我现在要求:
当CTNOS 有值时,则执行更新操作.
update sales set CUSTOMER=CUSTOMER WHERE CTNO=CTNOS当 CTNOS 没有值时,则执行插入操作:
 insert into sales(CTNO, CUSTOMER)       values(CTNOS, CUSTOMER);调用语句:DECLARE 
  CTNOS VARCHAR2(200);
  CUSTOMER VARCHAR2(200);BEGIN 
  CTNOS := 'qqqq';
  CUSTOMER := 'qqqq';  SALES_INSERT ( CTNOS, CUSTOMER );
  COMMIT; 
END; 
下面是需要修改的ORACLE过程.CREATE OR REPLACE procedure Sales_Insert(
    CTNOS in varchar2,
                       CUSTOMER in varchar2) 
is
begin
if (CTNOS!='' and CTNOS IS NOT null)
then
update sales set CUSTOMER=CUSTOMER WHERE CTNO=CTNOS;
ELSE
  insert into sales(CTNO, CUSTOMER)       values(CTNOS, CUSTOMER);
END IF;end Sales_Insert;
/

解决方案 »

  1.   

    CREATE OR REPLACE procedure Sales_Insert(
        v_CTNOS in varchar2,
        v_CUSTOMER in varchar2) 
    is
    begin
      update sales set CUSTOMER=v_CUSTOMER WHERE CTNO=v_CTNOS;
      if sql%notfound then
         insert into sales(CTNO, CUSTOMER) values(v_CTNOS, v_CUSTOMER);
      end if;
      commit;
    end Sales_Insert;
    /
      

  2.   

    谢谢ab5669(王长林) .
    能不能请教您:
    在这里,为什么下面这个语句不行???
    if (CTNOS!='' and CTNOS IS NOT null)
      

  3.   

    ''和null是一个概念,只要把CTNOS!='' 这个条件去掉就可以了,''和null不能用关系运算符比较的,CTNOS!='' 恒为false的
      

  4.   

    我把CTNOS!='' 去掉也不行啊.当CTNOS值没值时,可以正常插入,但当CTNOS有值时,却不会正常更新????
      

  5.   

    你看走到那个分支了,可以调试下,就你的程序,一般如果没插入的话肯定是走更新的分支了,如果走更新分支,再看update语句有什么问题,是不是where条件或set的问题
      

  6.   

    if (CTNOS!='' and CTNOS IS NOT null)这句有问题!
    改if ( (CTNOS!='null' or CTNOS!='null' or CTNOS!=' ') and CTNOS IS NOT null)