如何通过在PL SQL中根据需要声明Cursor来提高性能?

时间:2018-01-16 14:03:12

标签: oracle performance plsql cursor database-tuning

我有以下代码和2个游标。即使在需要调整之后,两者都是耗时的。 所以,我的想法是通过仅在需要的基础上调用游标SQL来提高函数的性能 基于一些已知的条件。

现有代码:

Function MyFunction(Param1 IN DATE) RETURN BOOLEAN

CURSOR C1 IS <MyTimeConsumingQuery1>;

CURSOR C2 IS <MyTimeConsumingQuery2>;

IF NVL(KnownCondition,'Y') = 'N' THEN
  OPEN C1;

ELSE
 OPEN C2;

END IF; 

...
END MyFunction

以下是我想要实现的目标:

Function MyFunction(Param1 IN DATE) RETURN BOOLEAN

IF NVL(KnownCondition,'Y') = 'N' THEN

CURSOR C1 IS <MyTimeConsumingQuery1>;

  OPEN C1;

ELSE

CURSOR C2 IS <MyTimeConsumingQuery2>;

 OPEN C2;

END IF; 

...
END MyFunction

当我尝试编译代码时,我收到PLS-00103: Encountered the symbol错误。

如何有选择地调用游标查询以提高性能?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。仅举例来说

Function MyFunction(Param1 IN DATE) RETURN BOOLEAN is
begin
  IF NVL(KnownCondition,'Y') = 'N' THEN
    declare  
      CURSOR C1 IS <MyTimeConsumingQuery1>;
    begin
      OPEN C1;
      ...
    end;
ELSE
    declare  
      CURSOR C2 IS <MyTimeConsumingQuery2>;
    begin
      OPEN C2;
      ...
    end;
END IF; 

...
END MyFunction