在PL/SQL中,我想将“源”模式作为参数传递给存储过程。例如:在PL/SQL中,我可以通过存储过程参数传递游标FROM子句的表模式吗?
BEGIN
CURSOR my_cursor IS
SELECT my_field FROM <schema>.my_table
...
我想'模式'值来自存储过程的输入参数。有谁知道我该怎么做?
P.S.对不起,如果这是一个愚蠢的简单问题,但我是PL/SQL新手,必须快速编写一些函数。
在PL/SQL中,我想将“源”模式作为参数传递给存储过程。例如:在PL/SQL中,我可以通过存储过程参数传递游标FROM子句的表模式吗?
BEGIN
CURSOR my_cursor IS
SELECT my_field FROM <schema>.my_table
...
我想'模式'值来自存储过程的输入参数。有谁知道我该怎么做?
P.S.对不起,如果这是一个愚蠢的简单问题,但我是PL/SQL新手,必须快速编写一些函数。
除了马克什么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;
这必须用动态SQL来完成。
DBMS_SQL包或Execute Immediate语句。
您不能在FROM子句中使用变量。
一个潜在的解决方案可能是
ALTER SESSION SET CURRENT_SCHEMA = '' < - 你想要的模式。
该命令更改默认模式。所以,如果你有一堆名字相同的表,你可以保存你自己的动态SQL并进行动态变更会话。
这就是引用游标的用途..一些缺点(类型检查?),但适用于你的想法。 – Thorsten 2008-11-10 19:39:55