将一组html输入作为参数传递给Oracle过程

时间:2017-05-26 12:06:04

标签: html forms post plsql

我需要将这个输入数组发送到Oracle程序中,我事先并不知道他们的名字(NAME = DB中的ID)。

<FORM ACTION="TESTPKG.FORMSAVE" METHOD="POST" ENCTYPE="multipart/form-data">
    <INPUT TYPE="text" NAME="1" VALUE="54642">
    <INPUT TYPE="text" NAME="2" VALUE="4141">
    <INPUT TYPE="text" NAME="5" VALUE="541671">
    <INPUT TYPE="text" NAME="6" VALUE="41542">
    <INPUT TYPE="text" NAME="7" VALUE="546424">
    <INPUT TYPE="text" NAME="9" VALUE="7815174">
    <INPUT TYPE="submit" VALUE="Save">
</FORM>

输入参数在FORMSAVE过程中的外观如何?如果只使用一些TYPE可以完成,那就太棒了。

所以我可以很容易地使用它,例如像这样:

FOR i IN 1..inputs.count LOOP
    something??
END LOOP;

我使用Oracle 11.2作为我的数据库。

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

您可以定义一种类型来处理您的数据;例如:

create or replace type tyRecord as object (
                                           type   varchar2(10),
                                           name   varchar2(10),
                                           value  number(10)
                                           );
create or replace type tyList as table of tyRecord;

您的程序可能是这样的:

create or replace procedure testInput(pInput IN tyList) is
begin
    for i in pInput.first .. pInput.count loop
        dbms_output.put_line( pInput(i).type || ' - ' ||
                              pInput(i).name || ' - ' ||  
                              pInput(i).value
                            );  
    end loop;
end;    

电话:

SQL> declare
  2      vList tyList := tyList();
  3  begin
  4      for i in 1 .. 3 loop
  5          vList.extend();
  6          vList(vList.last) := tyRecord('INPUT', i, i * 100);
  7      end loop;
  8      --
  9      testInput(vList);
 10  end;
 11  /
INPUT - 1 - 100
INPUT - 2 - 200
INPUT - 3 - 300

PL/SQL procedure successfully completed.

SQL>

答案 1 :(得分:0)

我终于使用Flexible参数传递(http://docs.oracle.com/cd/B12037_01/server.101/b12303/concept.htm#1005765

解决了这个问题

我的程序FORMSAVE现在看起来像这样:

PROCEDURE FORMSAVE(name_array in owa.vc_arr, value_array in owa.vc_arr) IS
BEGIN
    FOR n IN 1..name_array.count
    LOOP
        htp.print(name_array (n) || ': ' || value_array(n)); -- example
    END LOOP;
END FORMSAVE;

另外,表单语法中的action属性必须包含感叹号:

<FORM ACTION="!TESTPKG.FORMSAVE" METHOD="POST" ENCTYPE="multipart/form-data">