Oracle11g Oracle,执行字符串作为查询并返回结果集
我试图在oracle中创建一个字符串查询,然后执行它。我知道我可以使用executeimmediate来实现这一点,但是我不会得到返回的结果集。据我所知,我可以使用游标一行一行地检索行,但这似乎不起作用。我认为游标只是引用而不是结果集,或者我的知识可能非常有限,但无论如何。更清楚地说,我想通过BIRT报告工具执行这个字符串查询,它总是给我一个错误消息SQL语句不返回ResultSet对象 概念如下: 一,。我有一张有一些名字的表格。例如耐克、阿迪达斯……我不知道这些表格是什么。必须是动态的 二,。每个表都有其他表,如Nike.stores、Adidas.stores。 糟糕的是,高级表与低级表没有连接。例如,Nike table与Nike.stores table没有关系。不幸的是,这是数据库的设计方式 三,。因此,在MS SQL中,我创建了一个字符串,如:Oracle11g Oracle,执行字符串作为查询并返回结果集,oracle11g,Oracle11g,我试图在oracle中创建一个字符串查询,然后执行它。我知道我可以使用executeimmediate来实现这一点,但是我不会得到返回的结果集。据我所知,我可以使用游标一行一行地检索行,但这似乎不起作用。我认为游标只是引用而不是结果集,或者我的知识可能非常有限,但无论如何。更清楚地说,我想通过BIRT报告工具执行这个字符串查询,它总是给我一个错误消息SQL语句不返回ResultSet对象 概念如下: 一,。我有一张有一些名字的表格。例如耐克、阿迪达斯……我不知道这些表格是什么。必须是动态的 二,
SELECT @SqlStr = @SqlStr + N'SELECT * FROM ' + names + N'.stores
UNION ALL ' FROM **tableA** Group by names
实际执行过程如下:
Select * from Nike.stores UNION ALL Select * from Adidas.stores ...
这很好,因为它返回一个结果集
我的问题是如何在oracle中实现这一点?顺便说一句,我尽量不使用过程或函数,因为这是最初的需求之一。但是,我认为这可能是唯一的方法。如果您不知道从哪些表中获取数据,那么很不幸,您是一个糟糕设计的受害者。为了在SQL中实现这一点,您必须知道表名,即表名必须是静态的,不能是动态的 因此,您只剩下一个选项,动态SQL。您只能使用executeimmediate在PL/SQL中执行 UPDATE若要返回refcursor,请将OPEN FOR与动态SQL一起使用 举个例子,
SQL> variable cur refcursor
SQL> DECLARE
2 tab_name VARCHAR2(10);
3 str_sql VARCHAR2(200);
4 BEGIN
5 tab_name :='EMP';
6 str_sql :='SELECT empno, ename FROM '||tab_name;
7 OPEN :cur FOR str_sql;
8 END;
9 /
PL/SQL procedure successfully completed.
SQL> print cur
EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
EMPNO ENAME
---------- ----------
7900 JAMES
7902 FORD
7934 MILLER
14 rows selected.
SQL>
实际上如何从BIRT发出查询调用?如果您不能在toool命令上构建查询,那么您可以从调用中执行匿名PL/SQL块,并且它可以使用bind变量吗?Hi-Lalit。谢谢你的回复。我已经知道我必须使用动态SQL。我的问题是,在执行字符串查询时,我应该如何返回结果集,因为EXECUTE IMMEDIATE不会返回结果集。您需要形成动态字符串,然后将其作为引用光标打开。查看我的更新。