动态 PL/SQL

Posted

技术标签:

【中文标题】动态 PL/SQL【英文标题】:Dynamic PL/SQL 【发布时间】:2009-04-15 06:54:10 【问题描述】:

在 PL/SQL 中,我想将源模式和目标模式作为参数传递给存储过程。我们可以使用的来源:

PROCEDURE select_from_schema( the_schema VARCHAR2)
IS
  TYPE my_cursor_type IS REF CURSOR;
  my_cursor  my_cursor_type;
BEGIN
  OPEN my_cursor FOR 'SELECT my_field FROM '||the_schema||'.my_table';

  -- Do your FETCHes just as with a normal cursor

  CLOSE my_cursor;
END;

对于目标插入或更新语句,我们如何在该插入或更新语句中使用该架构....有谁知道我该怎么做???

附:打扰一下;我是初学者,必须快速编写一些函数。

【问题讨论】:

小心 SQL 注入。如果 'the_schema' 字符串包含来自 xkcd.com/327 的 sn-p 会发生什么? 【参考方案1】:

您可以对 INSERT 或 UPDATE 执行与 SELECT 相同的操作 - 使用如下动态 SQL:

EXECUTE IMMEDIATE 'INSERT INTO '||target_schema||'.my_table (col1,col2...) VALUES(:val1, :val2...)' USING my_row.col1, my_row.col2...;

【讨论】:

以上是关于动态 PL/SQL的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQLPL/SQL过程

Oracle——PL/SQL

oracle(sql)基础篇系列——PLSQL游标存储过程触发器

算法动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

算法动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

算法动态规划 ② ( 动态规划四要素 | 动态规划状态 State | 动态规划初始化 Initialize | 动态规划方程 Function | 动态规划答案 Answer )