我需要将这个输入数组发送到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作为我的数据库。
感谢您的回答。
答案 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">