3

在 PL/SQL 中,我想将“源”模式作为参数传递给存储过程。例如:

BEGIN
    CURSOR my_cursor IS
      SELECT my_field FROM <schema>.my_table
...

我希望“模式”值来自存储过程的输入参数。有谁知道我该怎么做?

PS 对不起,如果这是一个愚蠢的简单问题,但我是 PL/SQL 的新手,必须快速编写一些函数。

4

2 回答 2

8

除了 Mark Brady 所说的之外,另一个动态 SQL 选项是使用 REF CURSOR。由于您的示例代码包含一个游标,这将是最相关的。

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;
于 2008-11-10T19:32:21.963 回答
3

这必须使用动态 sql 来完成。

DBMS_SQL 包或 Execute Immediate 语句。

您不能在 FROM 子句中使用变量。

一个潜在的解决方案可能是

ALTER SESSION SET Current_Schema = '' <-- 你想要的模式。

该命令更改默认模式。因此,如果您有一堆同名的表,您可以保存自己的动态 SQL 并进行动态更改会话。

于 2008-11-10T19:26:26.030 回答