我试图完成看似简单的事情,但我无法做到正确。我想通过参数将sql查询传递给过程。在该过程中,我想循环遍历结果,并为选择列表创建选项。
我已尝试使用EXECUTE IMMEDIATELY,游标,SYS_REFCURSOR等,但似乎没有什么是正确的。有关如何实现这一目标的任何想法?谢谢!
PROCEDURE Dropdown
(
nam IN VARCHAR2,
qry IN VARCHAR2, /* 'SELECT val, descrip FROM table' */
)
IS
html VARCHAR2(1000);
BEGIN
html := '<select id="test" name="test">';
/* ?? */
html := html || '<option value="' || val || '">' || descrip ||'</option>';
html := html || '</select>';
htp.p(html);
END Dropdown;
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您只将它用于具有键 - 描述对的下拉列表,那么答案是使用常规变量,并使其与您要查询的最大值一样大。 通常,这将是密钥的无约束数字和描述的50-120个字符。但要分析一下或采取大的安全边际!
PROCEDURE dropdown( p_name IN VARCHAR2
, p_query IN VARCHAR2 /* 'SELECT val, descrip FROM table' */
)
IS
TYPE curtype IS REF CURSOR;
cur curtype;
v_value NUMBER;
v_descr VARCHAR2( 120 );
html VARCHAR2( 1000 );
BEGIN
html := '<select id="test" name="' || p_name || '">';
OPEN cur FOR SQL;
LOOP
FETCH cur INTO v_value, v_descr;
html := html || '<option value="' || v_value || '">' || v_descr || '</option>';
EXIT WHEN cur%NOTFOUND;
END LOOP;
html := html || '</select>';
Htp.p( html );
END dropdown;