0

firedac クエリ エディターで、1 つの結果 (カーソル) に対して複数の 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

上記のコードは、select および begin ブロックと end ブロックを組み合わせることができないため、機能しません。作業コードの提案はありますか?

4

2 に答える 2

3

あなたのコードを考えると、各クエリが1 つの値のみを返すと仮定します。

これが正しい場合、目的の結果 (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;

または単に 2 つのサブクエリ:

  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 に答える