0

I'm trying to use the results of multiple slq statements for one result(cursor) in the firedac query editor:

Sql Command in editor

DECLARE
 MyVar1 varchar2(100);
 MyVar2 varchar2(100);

BEGIN
  SELECT USERINCDE INTO MyVar1 FROM P_USR WHERE USEREXCDE='PH1';
  SELECT USERINCDE INTO MyVar2 FROM P_USR WHERE USEREXCDE='PH2';
END;

SELECT MyVar1,MyVar2  AS TEST FROM DUAL

The above code wil not work as an select and begin and end block can not be combined. Has Anyone sugestions for a working code?

4

2 回答 2

3

给定您的代码,我假设每个查询都返回一个且仅返回一个 value

如果这是正确的,要获得所需的结果(1 行,2 列),您可以使用CROSS JOIN

  SELECT V1.USERINCDE MyVar1, V2.USERINCDE MyVar2 FROM
    (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH1') V1
  CROSS JOIN
    (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH2') V2;

或者只是两个子查询:

  SELECT (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH1') MyVar1,
         (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH2') MyVar2 FROM DUAL
于 2015-01-14T16:25:54.537 回答
0

一般来说,这是一个奇怪的愿望。如果您希望从匿名块返回一些值,您应该执行以下操作:

BEGIN
  SELECT USERINCDE INTO :MyVar1 FROM P_USR WHERE USEREXCDE='PH1';
  SELECT USERINCDE INTO :MyVar2 FROM P_USR WHERE USEREXCDE='PH2';
END;

但是如果你非常非常需要使用游标,你可以这样做:

DECLARE
 MyVar1 varchar2(100);
 MyVar2 varchar2(100);
BEGIN
  SELECT USERINCDE INTO MyVar1 FROM P_USR WHERE USEREXCDE='PH1';
  SELECT USERINCDE INTO MyVar2 FROM P_USR WHERE USEREXCDE='PH2';
  OPEN :result FOR SELECT MyVar1, MyVar2 AS TEST FROM DUAL;
END;

在最后一种情况下,结果将是ref cursor

于 2015-01-14T19:40:13.213 回答