0

保存された手順から 1 つのデータ セットを返そうとしていますが、結果は 2 つのセットのうちの最初のものだけを返しています。次のデータ セットを 1 つだけ返すにはどうすればよいですか。

SELECT TOP 1 categoryname, displaypartno
FROM Categories
WHERE catalogid = @CatalogID AND source = @Manufacturer
ORDER BY categoryid DESC

IF @@RowCount=0
BEGIN
    SELECT '' AS categoryname, displaypartno
    FROM Products
    WHERE catalogid = @CatalogID AND source = @Manufacturer
END

最初の SQL が行を返さない場合にのみ 2 番目の SQL を実行する必要があるため、UNION は使用できないと思います。

4

4 に答える 4

0

これが最良の例です。複数のクエリがあり、1 つのクエリでエラーが発生した場合、別のクエリが確実に実行されます。両方のクエリでエラーが発生したとします。給与が 4000 を超える場合に複数のデータが存在し、EMP コード 7500 の場合はデータが存在しません。

*

Create Or Replace Procedure Proc_Test As
  l_Str_1    Varchar2(2000);
  l_Str_2    Varchar2(2000);
  p_Msg      Varchar2(2000);
  p_Err_Code Varchar2(2000);
  l_Count_1  Number;
  l_Count_2  Number;
Begin
  l_Str_1 := 'Select Sal  From Cmc7 Where Sal > 4000'; 
  l_Str_2 := 'SELECT sal FROM Cmc7 WHERE empno = 7500';
  Begin
    Execute Immediate l_Str_1
      Into l_Count_1;
  Dbms_Output.Put_Line(l_Count_1);
  Exception
    When Too_Many_Rows Then
      Dbms_Output.Put_Line('yahoo... many rows');
  End;
  Begin
    Execute Immediate l_Str_2
      Into l_Count_2;
  Dbms_Output.Put_Line(l_Count_2);
  Exception
    When No_Data_Found Then
      Dbms_Output.Put_Line('sorry...');
  End;
Exception
  When Others Then
    p_Msg      := Sqlerrm;
    p_Err_Code := Sqlcode;
End;

*

出力: yahoo...行が多くてすみません...

于 2015-04-17T12:16:21.927 に答える
0
SELECT TOP 1 categoryname, displaypartno
FROM (
  SELECT categoryname, displaypartno, 0 AS ResultPriority
  FROM Categories
  WHERE catalogid = @CatalogID AND source = @Manufacturer
  UNION ALL
  SELECT '' AS categoryname, displaypartno, 1 AS ResultPriority
  FROM Products
  WHERE catalogid = @CatalogID AND source = @Manufacturer
) t
ORDER BY ResultPriority, categoryid DESC
于 2014-01-16T20:55:42.700 に答える
0

IF NOT EXIST ( ) 関数を使用する必要があります。

変数テーブルを作成し、最初のステップの返された項目を追加します。次に、IF NOT EXIST 条件で作成した変数テーブルからすべての項目を選択し、2 番目のステップを書き留めます。

変数テーブルを作成しない場合は、カテゴリ テーブルから冗長な選択を選択します。

また、@@ROWCOUNT を使用しない理由http://www.johnpapa.net/t-sql-if-not-exists-versus-rowcount/

于 2014-01-16T21:17:24.040 に答える