我需要为知道自己在做什么的内部用户构建极其灵活的存储过程。这些人整天生活在 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 等。不幸的是,这是不可能的。
提前致谢...