经典报表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') 因为使用相同的代码单选按钮不起作用,因此仅接受其中一个答案。 我的要求是在某些问题的可选选项和某些问题的文本字段中获取用户响应。 如果有人能解决这个问题请帮忙。
函数
APEX_ITEM.RADIO_GROUP
为整个报告创建单个单选组。它适用于用户需要从报告中选择一行的用例。它不能用于为每行创建一个单选组。正如您所看到的,这渲染得很好,但您只能在整个报告中选择一个值。使用 APEX_ITEM.SWITH
(如果只有 2 个值)或任何 APEX_ITEM.SELECT_LIST_%
函数进行每行选择。