PL / SQL - 将SQL查询传递给过程并生成选择列表

时间:2015-11-05 21:32:05

标签: sql plsql cursor

我试图完成看似简单的事情,但我无法做到正确。我想通过参数将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;

2 个答案:

答案 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;