DECLARE @CODE CHAR(20),@NAME NVARCHAR(50),@ENDFLAG BIT
SELECT @CODE=MATERIALGROUPITEMCODE,@NAME=MATERIALGROUPITEMNAME,@ENDFLAG=1
 FROM PUB_MATERIALGROUPITEM
 WHERE MATERIALGROUPCODE='001'AND  MATERIALGROUPITEMCODE='201'
IF @CODE IS NULL
 RAISERROR('此物料分类不存在!',16,1) 
ELSE
 IF @ENDFLAG=1  
       SELECT @CODE AS MATERIALGROUPITEMCODE,@NAME AS MATERIALGROUPITEMNAME    
 ELSE
    RAISERROR('此物料分类非末级!',16,1)一运行提示:
ORA-06550: 第 1 行, 第 9 列: 
PLS-00103: 出现符号 "@"在需要下列之一时:
 begin function package pragma
   procedure subtype type use <an identifier>
   <a double-quoted delimited-identifier> form current cursor
符号 "@" 被忽略。
ORA-06550: 第 1 行, 第 23 列: 
PLS-00103: 出现符号 ","在需要下列之一时:
 := ; not null default
   character

解决方案 »

  1.   

    -- 瞎整一下:
    declare
      v_code varchar2(20);
      v_name varchar2(50);
      v_endflag NUMBER(18,0);
      v_cur sys_refcursor;
    begin  -- 此查询语句应该只能返回一条数据行,否则赋值语句会出错
      select MaterialGroupItemCode, MaterialGroupItemName, 1 INTO v_code, v_name, v_endflag
      from pub_materialgroupitem
      where MaterialGroupCode='001 and MaterialGroupItemCode='201';  IF nvl(v_code,'')='' then
        RAISE_APPLICATION_ERROR(-20998,'此物料分类不存在!');
      ELSE
        IF v_endflag=1
          open v_cur for 'select :v_code as MaterialGroupItemCode, :v_name as MaterialGroupItemName from dual' using v_code, v_name;
        ELSE
          RAISE_APPLICATION_ERROR(-20999,'此物料分类非末级!');
        END IF;
      END IF;
    end;
    /
      

  2.   

    -- 瞎整一下:
    declare
      v_code varchar2(20);
      v_name varchar2(50);
      v_endflag NUMBER(18,0);
      v_cur sys_refcursor;
    begin  -- 此查询语句应该只能返回一条数据行,否则赋值语句会出错
      select MaterialGroupItemCode, MaterialGroupItemName, 1 INTO v_code, v_name, v_endflag
      from pub_materialgroupitem
      where MaterialGroupCode='001' and MaterialGroupItemCode='201';  IF nvl(v_code,'')='' then
        RAISE_APPLICATION_ERROR(-20998,'此物料分类不存在!');
      ELSE
        IF v_endflag=1
          open v_cur for 'select :v_code as MaterialGroupItemCode, :v_name as MaterialGroupItemName from dual' using v_code, v_name;
        ELSE
          RAISE_APPLICATION_ERROR(-20999,'此物料分类非末级!');
        END IF;
      END IF;
    end;
    /
      

  3.   

    先谢谢你了,我运行了下。提示:ORA-06550: 第 15 行, 第 7 列: 
    PLS-00103: 出现符号 "OPEN"在需要下列之一时:
     * & - + / at mod remainder
       rem then <an exponent (**)> and or || multiset
      

  4.   

    还有,这个sql语句复杂吗?看sql不是很复杂,怎么转化成oracle后这么复杂
      

  5.   

    把这句话以注释,就可以正常运行了。。IF v_endflag=1
          open v_cur for 'select :v_code as MaterialGroupItemCode, :v_name as MaterialGroupItemName from dual' using v_code, v_name;
        ELSE
      

  6.   


    -- 嗯,对了:少了 个 then-- 瞎整一下:
    declare
      v_code varchar2(20);
      v_name varchar2(50);
      v_endflag NUMBER(18,0);
      v_cur sys_refcursor;
    begin  -- 此查询语句应该只能返回一条数据行,否则赋值语句会出错
      select MaterialGroupItemCode, MaterialGroupItemName, 1 INTO v_code, v_name, v_endflag
      from pub_materialgroupitem
      where MaterialGroupCode='001' and MaterialGroupItemCode='201';  IF nvl(v_code,'')='' then
        RAISE_APPLICATION_ERROR(-20998,'此物料分类不存在!');
      ELSE
        IF v_endflag=1 then
          open v_cur for 'select :v_code as MaterialGroupItemCode, :v_name as MaterialGroupItemName from dual' using v_code, v_name;
        ELSE
          RAISE_APPLICATION_ERROR(-20999,'此物料分类非末级!');
        END IF;
      END IF;
    end;
    /
      

  7.   

    谢谢了,自己太粗心了。主要还是自己sql不是很熟悉。