1

内部ユーザーが何をしているかを知っている非常に柔軟なストアド プロシージャを構築する必要があります。これらは、一日中 SQL*Plus ウィンドウに住んでいて、突然 Web フォームの使用を余儀なくされる人々です。

これらのユーザーには、プロシージャ メタデータを検査して作成されたフォームが提供され、そこで次のようなストアド プロシージャを実行できます。

create or replace 
PROCEDURE DEV_UPDATE_TABLE_FOO 
(
  SET_FIELD IN VARCHAR2  
, SET_VALUE IN VARCHAR2  
, WHERE_CLAUSE IN VARCHAR2   
) AS 
BEGIN
  UPDATE foo
  SET <SET_FIELD>=<SET_VALUE>
  where <WHERE_CLAUSE>;
END DEV_UPDATE_TABLE_FOO;

いくつかの簡単な検索では、問題の「プロシージャメタデータを検査して作成されたフォームを提供する」という部分で問題を引き起こすことなく、これが可能であることがわかりません。

SQL インジェクションは基本的に推奨されます。つまり、これらの人々が、選択した単一のフィールドを選択した値で、作成した set 句で更新できるようにしたいと考えています。値が VARCHAR2 などの文字列を引用符で囲む必要があります。

しかし、フォームを描画する UI で利用できるのはメタデータだけです。他のストアド プロシージャは、より静的で合理的です。それらは簡単です。

何か案は?明らかな答えは、「単に sql*plus や sqldeveloper などにアクセスできるようにすることです。残念ながらそれは不可能です。

前もって感謝します...

4

1 に答える 1

3

使用する

EXECUTE IMMEDIATE dynamic_string

ドキュメントはこちら

于 2013-01-24T23:05:30.490 に答える