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

超级灵活的Oracle存储过程/动态SQL?,sql,oracle,stored-procedures,dynamic-sql,Sql,Oracle,Stored Procedures,Dynamic Sql,我需要为知道自己在做什么的内部用户构建极其灵活的存储过程。这些人整天生活在SQL*Plus窗口中,他们会突然被迫使用web表单 将向这些用户提供一个通过检查过程元数据创建的表单,在该表单中,他们将能够执行如下所示的存储过程: create or replace PROCEDURE DEV_UPDATE_TABLE_FOO ( SET_FIELD IN VARCHAR2 , SET_VALUE IN VARCHAR2 , WHERE_CLAUSE IN VARCHAR2 )

我需要为知道自己在做什么的内部用户构建极其灵活的存储过程。这些人整天生活在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;
创建或替换
程序开发\u更新\u表\u FOO
(
在VARCHAR2中设置_字段
,在VARCHAR2中设置_值
,WHERE_子句在VARCHAR2中
)作为
开始
更新foo
设置=
哪里
结束开发更新表;
通过一些快速搜索,我不认为这可能会导致问题的“提供一个表单,通过检查过程元数据创建”部分出现问题

基本上鼓励SQL注入。也就是说,我们希望这些人能够用自己选择的值更新自己选择的单个字段,并创建一个set子句。它们必须引用值为VARCHAR2的字符串,等等

然而,绘制表单的UI所能使用的只是元数据。其他存储过程将更加静态和合理。这些很简单

有什么想法吗?显而易见的答案是“让他们访问sql*plus或sqldeveloper等。不幸的是,这是不可能的

提前感谢…

使用

EXECUTE IMMEDIATE dynamic_string

文档是

我不清楚您试图解决的问题。您可以使用
执行立即
DBMS_SQL
来生成和执行动态SQL语句。但听起来您的问题与检查过程的元数据有关,而您关心的似乎不是如何实现生成动态SQL的过程。