2017-05-26 64 views
0

我需要将这个输入数组发送到Oracle过程中,我不知道它们的名称(NAME = DB中的ID)。将一组html输入作为参数传递给Oracle过程

<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作为我的数据库。

感谢您的回答。

+0

你可以有什么样的处理过程之外?也就是说,你是否需要将参数作为单个文本值传递,在这种情况下,我会建议一个CLOB,或者可以详细说明这个值来构建更多结构化类型? – Aleksej

+0

我不需要将它作为单个文本值传递。我在这里有免费的手。 –

回答

0

我终于解决了它使用灵活的参数传递(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"> 
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> 
+0

如何在表单提交后发送此对象列表?这个表格也是在PLSQL程序中制作的。最好解析从表单直接发送的输出。 –

+0

这使我们回到我以前的问题如何通过这些值?如果你可以在调用者中做任何你想做的事情,那么你应该能够解析数据并填充一个像我的例子那样的结构。如果你有更多的限制,也许最好将该值作为单个CLOB传递并在过程中解析它 – Aleksej

相关问题