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

How to re-use a SQL query in a PL/SQL procedure?

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

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

SELECT * 
FROM mytable
WHERE age > 18

有没有办法 "store it",所以我可以这样做,例如 :

SELECT COUNT(*) INTO var1
FROM myQuery

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

谢谢!

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

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

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

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

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