在PL / SQL中,我可以通过存储过程参数传递游标FROM子句的表模式吗?

时间:2008-11-10 19:25:18

标签: oracle plsql

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

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

我希望'schema'值来自输入参数到存储过程中。有谁知道我怎么能这样做?

P.S。很抱歉,如果这是一个愚蠢的简单问题,但我是PL / SQL的新手,必须快速编写一些函数。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

这必须使用动态sql完成。

DBMS_SQL包或Execute Immediate语句。

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

潜在的解决方案可能是

ALTER SESSION SET Current_Schema =''&lt; - 您想要的架构。

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