Oracle Apex主详细信息报告和带有单选按钮选项的详细信息报告可供选择
我正在寻找在Oracle Apex中构建简单测验类型应用程序的建议。Oracle Apex主详细信息报告和带有单选按钮选项的详细信息报告可供选择,oracle,oracle-apex,Oracle,Oracle Apex,我正在寻找在Oracle Apex中构建简单测验类型应用程序的建议。 我不需要为基表构建任何创建/更新/删除屏幕,因为我将使用SQL语句用数据填充我的表 我有两张桌子 Create Table Question_Bank ( Question_Id Number (5) Primary Key , Question_Description Varchar2(1000) ) ; 问题_选项_Id类似于1,2,3,4(类似于没有测验选项选择) 因此,应用程序应
我不需要为基表构建任何创建/更新/删除屏幕,因为我将使用SQL语句用数据填充我的表 我有两张桌子
Create Table Question_Bank
(
Question_Id Number (5) Primary Key ,
Question_Description Varchar2(1000)
)
;
问题_选项_Id类似于1,2,3,4(类似于没有测验选项选择)
因此,应用程序应该显示如下问题和选项。我更喜欢一页上有一些数字的滚动页面
This is Question No 1
Option 1
Option 2
Option 3
Option 4
This is Question No 2
Another Option 1
Another Option 2
Another Option 3
Another Option 4
This is Question No 3
Q No 3 Option 1
Q No 3 Option 2
Q No 3 Option 3
Q No 3 Option 4
到目前为止,我已经创建了主/明细表,这是一种报告(不可编辑),我可以看到问题和可能的选择(我有选择的问题,选择显示在第二列),但这不是我想要的。我正在使用免费的Oracle Apex在线帐户版本20.2。请查看Survey Builder应用程序,它允许用户查看/预览/提交问题和答案。 这个应用程序可以解决您的需求,或者给您一个如何构建它的想法 您可以在应用程序库中找到此应用程序。
您可以尝试动态构建包含问题和选项的页面。您必须在页面中添加一个新的
PL/SQL动态区域
Region。在Source>PL/sqlcode
region属性中,将示例代码放在下面
FOR l_question IN (
SELECT QUESTION_ID, QUESTION_DESCRIPTION
FROM QUESTION_BANK
order by QUESTION_ID
) LOOP
HTP.P('<h3>' || APEX_ESCAPE.HTML(l_question.QUESTION_DESCRIPTION) || '</h3>');
HTP.P(
APEX_ITEM.HIDDEN(
p_idx => 1, -- Values stored in APEX_APPLICATION.g_f01 table.
p_value => l_question.QUESTION_ID
)
);
HTP.P('<fieldset id="qfs' || l_question.QUESTION_ID || '">');
HTP.P(
APEX_ITEM.TEXT(
p_idx => 2, -- Values stored in APEX_APPLICATION.g_f02 table.
p_item_id => 'qh' || l_question.QUESTION_ID,
p_attributes => 'style="display:none"'
)
);
FOR l_choice IN (
SELECT QUESTION_CHOICE_ID, QUESTION_CHOICE_DESCRIPTION
FROM QUESTION_CHOICES
WHERE QUESTION_ID = l_question.QUESTION_ID
) LOOP
HTP.P('<input type="radio" value="' || l_choice.QUESTION_CHOICE_ID || '" name="' || l_question.QUESTION_ID || '" onchange="document.getElementById(''qh' || l_question.QUESTION_ID || ''').value = this.value">');
HTP.P('<label for="' || l_question.QUESTION_ID || '">' || APEX_ESCAPE.HTML(l_choice.QUESTION_CHOICE_DESCRIPTION) || '</label>');
END LOOP;
HTP.P('</fieldset>');
END LOOP;
DECLARE
v_question_count NUMBER := APEX_APPLICATION.g_f01.COUNT;
v_question_answer_id QUESTION_ANSWERS.QUESTION_ANSWER_ID%TYPE := QUESTION_ANSWERS_SEQ.NEXTVAL;
BEGIN
FOR i IN 1..v_question_count LOOP
INSERT INTO QUESTION_ANSWERS (QUESTION_ANSWER_ID, QUESTION_ID, QUESTION_CHOICE_ID)
VALUES (v_question_answer_id, APEX_APPLICATION.g_f01(i), APEX_APPLICATION.g_f02(i));
END LOOP;
END;
还有另一个通过集合的迭代(两个集合都有相同数量的成员)并将值插入到某个表中
我的代码生成表单时没有花哨的样式,所以您必须自己处理:)如果您需要sql文件来处理表和数据,页面的外观应该是
p\u idx
参数用于指定目标APEX\u应用程序.g\u fxx
集合的索引。如果p_idx=1
,则APEX将在APEX_应用程序.g_f01
集合中创建新成员。如果p_idx=2
则在APEX_应用程序.g_f02
等中创建新成员。在这种情况下,您需要创建包含两列的“虚拟”表-quiestion_id和question_choice_id。为此,我在每次迭代中放置两个APEX_ITEM
调用。一个APEX\u项目
存储在第一个集合中,第二个APEX\u项目
存储在第二个集合中。p\u项目id
参数用于设置新项目的HTMLid
属性。我这样做是因为我需要为每个隐藏项设置特定的id
,它将选定的选项存储在特定的问题中。我在每个input
元素的onchange
事件中的JavaScript代码中使用这个id
。在此事件中,浏览器将设置目标隐藏项。作为选择器,我使用id
属性的值。在第一个循环中,第一个项目存储QUESTION\u id
,但第二个项目存储NULL(因为我没有设置p\u value
参数)。如前所述,第二项用于存储所选选项。当APEX呈现您的测验时,用户尚未选择任何选项,因此这就是第二项默认为空的原因。要设置此项,我使用onchange
事件。我认为将验证放在Processing>validation
中会更好。在提交后的Processing>中,您将在页面验证之前必须完成的过程放入中。不要忘记投票给我的答案;)谢谢你,莫妮卡。我确实查看了调查应用程序,但不知何故,我无法使其满足我的要求。
DECLARE
v_question_count NUMBER := APEX_APPLICATION.g_f01.COUNT;
v_question_answer_id QUESTION_ANSWERS.QUESTION_ANSWER_ID%TYPE := QUESTION_ANSWERS_SEQ.NEXTVAL;
BEGIN
FOR i IN 1..v_question_count LOOP
INSERT INTO QUESTION_ANSWERS (QUESTION_ANSWER_ID, QUESTION_ID, QUESTION_CHOICE_ID)
VALUES (v_question_answer_id, APEX_APPLICATION.g_f01(i), APEX_APPLICATION.g_f02(i));
END LOOP;
END;