2017-05-26 28 views
0

この配列の入力をOracleプロシージャに送信する必要があります。その名前は事前にわかりません(NAME = ID in DB)。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の手順で入力パラメータをどのようにする必要がありますか?もしそれがちょうどいくつかのタイプを使用して行うことができれば、それは素晴らしいでしょう。

だから私は簡単にそれを使用することができます。このように:

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

コール:

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; 

あなたの手順は、次のようなものかもしれない

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

関連する問題