0

window.opener.location.hrefからplsqlプロシージャを呼び出していますが、このプロシージャにパラメータとして配列を渡したいと思います。

window.opener.location.href="dt_bulk_test_pkg.pc_bulk_test?ps="+frmresult.ps.value+
                            "&p_step="+frmresult.p_step.value+
                            "&p_year="+frmresult.p_year.value+
                            "&p_quarter="+frmresult.p_quarter.value+
                            "&p_diagnostic_type="+frmresult.p_diagnostic_type.value+
                            "&p_overwrite="+frmresult.p_overwrite.value+
                            "&p_company_id="+v_comp_id;

v_comp_idは配列です。

4

2 に答える 2

1

これが古いスレッドであることは知っていますが、私はここにたどり着いたので、他の人もそうするでしょう。

URL を介して配列を PL/SQL に渡すことはかなり可能であり、危険なハックではなく、明示的にサポートされています。オラクルのドキュメントへのリンク

PL/SQL 入力パラメータを varchar2 のテーブルとして宣言します。次に、URL で同じパラメーター名を繰り返し渡します。

1/ PL/SQL ソースの例:

CREATE OR REPLACE PROCEDURE test_array(
    p IN dbms_sql.varchar2_table )
AS
BEGIN
  FOR i IN p.FIRST .. p.LAST
  LOOP
    htp.p(p(i)||'<br>');
  END LOOP;
END test_array;

* 2/ 呼び出すための URL の例: - XXXXXXXXXXXXXX を独自の設定に置き換えます *

http://XXXXXXXXXXXXXX/test_array?p=first ele&p=second ele

3/出力

first ele
second ele

必要な数の要素を渡すことができます。この例では 2 を使用しました。

データ型が varchar2 でない場合は、とにかく URL からそれらを varchar2 としてキャプチャし、pl/sql 内で数値などに変換します。

于 2014-04-13T14:20:19.757 に答える
1

PL/SQL はデータベース テクノロジであり、Javascript はブラウザ内テクノロジです (ノードまたは Rhino を使用してサーバー サイド JS を実行している場合を除きます)。ブラウザは Web サーバーとのみ通信できます。したがって、javascript の観点からは、ストアド プロシージャを呼び出しているのではなく、そのストアド プロシージャを呼び出すどこかで実行している必要がある Web サーバーを呼び出しています。

配列がどのように正確に表現されるかは、サーバー側の言語/Web フレームワーク次第ですが、かなり標準的なアプローチは、jQuery の$.paramメソッドによるものです。たとえば、このサイトでコンソールを開くと、次のことができます。

> $.param({example: [1,2,3]})
"example%5B%5D=1&example%5B%5D=2&example%5B%5D=3"

警告の言葉。

  • データベースのストアド プロシージャを HTTP 経由で直接公開することは、設計が悪いだけでなく、非常に悪いセキュリティ リスクになる可能性があります。
  • URL にパラメーターを埋め込むということは、HTTP GET 要求を使用していることを意味します。GET 要求は、サーバーの状態に影響を与えないリソースを対象としているため、ストアド プロシージャはデータを変更するのではなく取得するだけに注意してください。危険なのは、誰かがその URL を電子メールや Web ページの img src タグに入れる可能性があり、リンクをクリックしたり Web ページにアクセスしたりするだけでその URL にアクセスする可能性があることです。
  • すべてのパラメーターは、url エンコーディングを介して渡す必要があります。前述したように、jQuery.param がこれを行います。
  • XSS 攻撃にもさらされている可能性があります。
于 2012-07-19T10:53:16.367 に答える