使用开始和结束块时获取游标作为结果



我正在尝试在firedac查询编辑器中将多个slq语句的结果用于一个结果(光标):

编辑器中的 SQL 命令

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

上面的代码不能作为选择和开始和结束块组合。有没有人对工作代码提出异议?

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

如果这是正确的,为了达到所需的结果(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

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

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;

在最后一种情况下,结果将是引用光标。

最新更新