如何在PL / SQL过程中重用SQL查询?

时间:2015-03-27 16:17:25

标签: sql plsql oracle10g

我正在编写PL / SQL过程。在此过程的主体中,如何在不重写的情况下使用两次相同的查询?

为了简化,假设我有这个SQL查询:

SELECT * 
FROM mytable
WHERE age > 18

有没有办法“存储它”,所以我可以这样做:

SELECT COUNT(*) INTO var1
FROM myQuery

我知道 WITH ... AS 关键字,但我知道它只能在当前语句中使用,我希望能够从不同的语句中调用它。

谢谢!

1 个答案:

答案 0 :(得分:2)

有各种可能性。以下是我立即想到的,可能还有其他人:

  • 使用您的查询声明一个显式的CURSOR,并在您的过程正文中多次使用该游标。

  • 将查询存储在字符串变量中,并使用EXECUTE IMMEDIATE多次运行

  • 执行一次查询,将结果存储在本地集合中(最有可能是嵌套表),并多次处理这些存储的结果

  • 创建一个执行查询的函数,并将其结果作为嵌套表类型返回。然后SELECT FROM TABLE( my_function )多次