DECLARE
VLISTID1  PARAMLIST:=GET_PARAMETER_LIST('REPORTARGUMENTS1');
begin
IF ID_NULL(VLISTID1) THEN
  VLISTID1:=CREATE_PARAMETER_LIST('REPORTARGUMENTS1');
  ADD_PARAMETER(VLISTID1,'P_GROUP_ID',TEXT_PARAMETER,to_char(:parameter.p_GROUP_ID));
ELSE 
  SET_PARAMETER_ATTR(VLISTID1,'P_GROUP_ID',TEXT_PARAMETER,to_char(:parameter.p_GROUP_ID));
END IF;
 RUN_PRODUCT(REPORTS,'WIPAZYLL',ASYNCHRONOUS,RUNTIME,FILESYSTEM,VLISTID1);
END;---------------------------------------
上述代码
如参数表VLISTID1为空则创建它,且插入参数'P_GROUP_ID'
如参数表VLISTID1不为空则直接为里面的参数'P_GROUP_ID'赋值可以发现问题是:如果参数表VLISTID1已经在其他FORM上被创建,但未为它插入参数'P_GROUP_ID'
则程序走第二条分支,直接为参数'P_GROUP_ID'赋值,此时就会出错了我想问问此程序应该怎么改
有没有VLISTID1 EXISTS PARAMETER 'P_GROUP_ID'? 这样的函数来判断参数表是否存在某名称的参数?

解决方案 »

  1.   

    都没人用Developer/2000吗...继续等.....
    我自己没有运行环境调试不到,等大虾们看看判断参数表内是否有某参数是不是这么写?declare
      ls_center varchar2(6);
      x_dept  varchar2(20):='PO';
      VLISTID  PARAMLIST:=GET_PARAMETER_LIST('tempdata');
    begin
      IF ID_NULL(VLISTID) THEN
         VLISTID:=CREATE_PARAMETER_LIST('tempdata');
      END IF;

         IF GET_PARAMETER_ATTR(VLISTID,'P_REP',TEXT_PARAMETER,x_dept) IS NULL  THEN /*这里是这么判断吗?*/
    ADD_PARAMETER(VLISTID,'P_REP',TEXT_PARAMETER,x_dept);
         ELSE
            SET_PARAMETER_ATTR(VLISTID,'P_REP',TEXT_PARAMETER,x_dept);
         END IF;  RUN_PRODUCT(REPORTS,'PORCVMQ',ASYNCHRONOUS,RUNTIME,FILESYSTEM,VLISTID,NULL);
    end;
      

  2.   

    DECLARE
      VLISTID1 PARAMLIST:=GET_PARAMETER_LIST('REPORTARGUMENTS1');
    BEGIN
      IF NOT ID_NULL(VLISTID1) THEN
        DESTROY_PARAMETER_LIST(VLISTID1);
      END IF;
      VLISTID1:=CREATE_PARAMETER_LIST('REPORTARGUMENTS1');
      ADD_PARAMETER(VLISTID1,'P_GROUP_ID',TEXT_PARAMETER,to_char(:parameter.p_GROUP_ID));
      RUN_PRODUCT(REPORTS,'WIPAZYLL',ASYNCHRONOUS,RUNTIME,FILESYSTEM,VLISTID1);
    END;
      

  3.   

    既然你不能确定参数列表里是否存在'P_GROUP_ID'这个参数,那你就先用DESTROY_PARAMETER_LIST(VLISTID1)函数将列表VLISTID1中的参数全部清空掉,这样的话你就可以往里面插入任何你想要加入的参数了