ORA-06550:   第   11   行,   第   30   列:   
  PLS-00457:   表达式必须是   SQL   类型  
----------------------------------------------
DECLARE  INTCOUNT INT ;
str1 Varchar(50);
BEGIN 
str1 :=InitReg';
execute Immediate 'SELECT COUNT(*)  FROM SMLOPT WHERE SCODE=:p1' into INTCOUNT  using 'A014006';
IF(INTCOUNT=0) then
execute Immediate 'INSERT INTO SMLOPT(SOPTID,BOPTID,SNAME,LIMITDAY,SEQUENCENUM,CLASSNAME,DUELIMIT,ISACTIVE,SCODE,BFORBID) VALUES (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10)'
 using 7,5,'商品',Null,1,0,str1,1,'A014006','商品';
dbms_output.put_line('1');
ELSE 
execute Immediate 'UPDATE SMLOPT SET SOPTID=:p1,BOPTID=:p2,SNAME=:p3,SEQUENCENUM=:p4,CLASSNAME=:p5,ISACTIVE=:p6 WHERE SCODE=:p7 '
 using 7,5,'商品',1,InitReg',InitReg',1,'A014006' ;
dbms_output.put_line('2');
END if; 
end ;

解决方案 »

  1.   


    DECLARE  INTCOUNT INT ;
    str1 Varchar(50);
    BEGIN 
    str1 :=InitReg';
    execute Immediate 'SELECT COUNT(*)  FROM SMLOPT WHERE SCODE=:p1' into INTCOUNT  using 'A014006';
    IF(INTCOUNT=0) then
    execute Immediate 'INSERT INTO SMLOPT(SOPTID,BOPTID,SNAME,LIMITDAY,SEQUENCENUM,CLASSNAME,DUELIMIT,ISACTIVE,SCODE,BFORBID) VALUES (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10)'
     using 7,5,'商品',Null,1,0,str1,1,'A014006','商品';
    dbms_output.put_line('1');
    ELSE 
    execute Immediate 'UPDATE SMLOPT SET SOPTID=:p1,BOPTID=:p2,SNAME=:p3,SEQUENCENUM=:p4,CLASSNAME=:p5,ISACTIVE=:p6 WHERE SCODE=:p7 ' using 7,5,'商品',1,'InitReg',1,'A014006' ;
    dbms_output.put_line('2');
    END if; 
    end ;
      

  2.   

    DECLARE  INTCOUNT INT ;
    str1 Varchar(50);
    BEGIN 
    str1 :='InitReg';
    execute Immediate 'SELECT COUNT(*)  FROM SMLOPT WHERE SCODE=:p1' into INTCOUNT  using 'A014006';
    IF(INTCOUNT=0) then
    execute Immediate 'INSERT INTO SMLOPT(SOPTID,BOPTID,SNAME,LIMITDAY,SEQUENCENUM,CLASSNAME,DUELIMIT,ISACTIVE,SCODE,BFORBID) VALUES (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10)'
     using 7,5,'商品',Null,1,0,str1,1,'A014006','商品';
    dbms_output.put_line('1');
    ELSE 
    execute Immediate 'UPDATE SMLOPT SET SOPTID=:p1,BOPTID=:p2,SNAME=:p3,SEQUENCENUM=:p4,CLASSNAME=:p5,ISACTIVE=:p6 WHERE SCODE=:p7 '
     using 7,5,'商品',1,InitReg',InitReg',1,'A014006' ;
    dbms_output.put_line('2');
    END if; 
    end ;
      

  3.   

    1,using后面有8个参数2,using后面的InitReg',InitReg',写法有问题,我改成了'InitReg'
      

  4.   

    是我写错了;找到问题的原因了;就是参数使用了 null ;才报错的;
    那怎么使参数为null呢?因为是动态的
      

  5.   

    NULL是常量字符串吧。所以我觉得可能要用双引号的形式