超级灵活的Oracle存储过程/动态SQL?

时间:2013-01-24 23:02:17

标签: sql oracle stored-procedures dynamic-sql

我需要为内部用户构建非常灵活的存储过程,以了解他们正在做什么。这些人整天都在SQL * Plus窗口中,他们会被迫使用网络表单。

将为这些用户提供一个表单,通过检查过程元数据创建,他们将能够执行如下所示的存储过程:

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等。不幸的是,不可能。”

提前致谢...

1 个答案:

答案 0 :(得分:3)

使用

EXECUTE IMMEDIATE dynamic_string

文档为here