Oracle APEX 获取经典报告列值 APEX_APPLICATION.G_F30(i) 但给出 ORA-01403:未找到数据

问题描述 投票:0回答:1

经典报表SQL:

SELECT APEX_ITEM.HIDDEN(10,Q.QUESTIONID) QUESTIONID_HID,
Q.QUESTION,
CASE WHEN Q.ANSWER_TYPE = 'RADIO' THEN
    CASE (SELECT LISTAGG(A.ANSWER_CODE, ', ')
         WITHIN GROUP (ORDER BY A.ANSWERID, A.ANSWER_CODE) ANSWER
          FROM XYZ A
          WHERE A.QUESTIONID = Q.QUESTIONID)
         WHEN 'G, P' THEN                
          apex_item.radiogroup(20, 'G', NULL, 'Government')||'<br>'||
          apex_item.radiogroup(20, 'P', NULL, 'Private')
         WHEN 'L, H, M' THEN                
          apex_item.radiogroup(30, 'L', NULL, 'Low Income')||'<br>'||
          apex_item.radiogroup(30, 'H', NULL, 'High Income')||'<br>'||
          apex_item.radiogroup(30, 'M', NULL, 'Medium Income')
   END
        
ELSE
    APEX_ITEM.TEXT(20, NULL) 
END INPUTCOL
FROM ABC Q
WHERE Q.APPID = :APP_ID;

我的页面级流程:

DECLARE
V_QUESTIONID INTEGER;
V_ANSWER_OPT VARCHAR2(20);
V_ANSWER VARCHAR2(20);
V_ANSWER_TYPE VARCHAR2(10);
BEGIN 

  FOR i in 1..APEX_APPLICATION.G_F10.COUNT LOOP
      V_QUESTIONID := APEX_APPLICATION.G_F10(i);
      
      SELECT Q.ANSWER_TYPE INTO V_ANSWER_TYPE
      FROM ABC Q
      WHERE Q.QUESTIONID = V_QUESTIONID;
      IF V_ANSWER_TYPE = 'RADIO' THEN
       
          SELECT LISTAGG(A.ANSWER_CODE, ', ')
             WITHIN GROUP (ORDER BY A.ANSWERID, A.ANSWER_CODE) ANSWER INTO V_ANSWER_OPT
              FROM XYZ A
              WHERE A.QUESTIONID = V_QUESTIONID;

      END IF;        
      IF V_ANSWER_OPT = 'G, P' THEN
          
          V_ANSWER := APEX_APPLICATION.G_F20(i);
      ELSIF V_ANSWER_OPT = 'L, H, M' THEN
          V_ANSWER := APEX_APPLICATION.G_F30(i);
      ELSE
          V_ANSWER := APEX_APPLICATION.G_F20(i);
      END IF;    
      
        INSERT INTO CSD_DTL  (CSDID,
                                           QUESTIONID,
                                           ANSWER,
                                           CUSTOMER_POINT)              
         VALUES(:P10_SURVEYID,
                V_QUESTIONID,
                V_ANSWER,
                10); 
         COMMIT;            
  END LOOP; 
END; 

此代码适用于 4 行、一个单选按钮组和 3 个文本字段,但当循环进入具有另一个单选按钮组的第 5 行时,则会出现错误。 通过 APEX_APPLICATION.G_F01(i) 获取经典报告列值,这对我来说并不新鲜,但在这种情况下,我在同一列中使用了两个无线电组,但不同行具有不同的代码,其中一个是 apex_item.radiogroup(20, 'G', NULL ,“政府”)和其他的是 apex_item.radiogroup(30, 'M', NULL, 'Medium Income') 因为使用相同的代码单选按钮不起作用,因此仅接受其中一个答案。 我的要求是在某些问题的可选选项和某些问题的文本字段中获取用户响应。 如果有人能解决这个问题请帮忙。

oracle plsql oracle-apex oracle-apex-19.1
1个回答
0
投票

函数

APEX_ITEM.RADIO_GROUP
为整个报告创建单个单选组。它适用于用户需要从报告中选择一行的用例。它不能用于为每行创建一个单选组。正如您所看到的,这渲染得很好,但您只能在整个报告中选择一个值。使用
APEX_ITEM.SWITH
(如果只有 2 个值)或任何
APEX_ITEM.SELECT_LIST_%
函数进行每行选择。

© www.soinside.com 2019 - 2024. All rights reserved.