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 回答