在对象上存储 sql 查询

Posted

技术标签:

【中文标题】在对象上存储 sql 查询【英文标题】:Store sql query on object 【发布时间】:2013-01-22 13:33:21 【问题描述】:

有没有办法将查询存储在对象中,以便您可以在游标中使用它或作为更大查询的子查询?这一切都没有使用立即执行?

假设你想要这个:

set serveroutput on;
DECLARE
  CNT NUMBER; 
  v1 varchar2(4000);
  SQL_QUERY view := SELECT table_name FROM USER_TABLES;
  CURSOR C1 IS 
    SQL_QUERY;
BEGIN
  OPEN C1;
    FETCH C1 INTO V1;
    dbms_output.put_line('name of the first table: '||v1);
  CLOSE C1;
  SELECT COUNT(*) INTO CNT FROM SQL_QUERY;
  dbms_output.put_line('Count: '|| cnt);
end;

有可能吗?

【问题讨论】:

【参考方案1】:

“将查询存储在对象中”

这是视图的定义。

create view foo as select table_name from user_tables;

然后

DECLARE
  CNT NUMBER; 
  v1 varchar2(4000);
  CURSOR C1 IS 
    select * from foo;
BEGIN
  OPEN C1;
    FETCH C1 INTO V1;
    dbms_output.put_line('name of the first table: '||v1);
  CLOSE C1;
  SELECT COUNT(*) INTO CNT FROM (select null from foo);
  dbms_output.put_line('Count: '|| cnt);
end;

这不是你想要的吗?

【讨论】:

不是真的,我想要一种方法来定义一个查询,我可以用它来封装另一个查询或在游标中使用它。 @JGS,那么你必须使用动态SQL,即REF CURSOR或EXECUTE_IMMEDIATE等...

以上是关于在对象上存储 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 上查询存储过程的内容

查询 SQL 表并将结果存储在数组中

使用 RStudio 连接到本地存储的压缩 SQL 数据库并在其上运行查询

PostGreSQL Json数据存储和条件查询

在查询上遇到子选择,但是存储没有对象引用 Apollo Link State

调试存储过程时如何执行sql查询