3

以下のような If ステートメント ブロックがエラーで失敗しています - PLS-00103: Encountered the symbol "SELECT" when expected one of the following....

Begin
    If (select count(*) from Table1) > 0 then
        dbms_output.put_line('Test');
    end if;
end;

私はうまく動作する同様の Case ステートメントを持っています

select 
case 
    when (select count(*) from Table1) > 0
        then 2
    else
        1
end
from dual

Oracleドキュメントで読んだことから、ブール式をサポートする場合といつサポートするか、If条件でサブクエリがサポートされているかどうかのアイデア。

注:ステートメントは簡略化されています。テーブル全体の数を実際に取得するつもりはないので、最適化の提案はありません。

4

3 に答える 3

6

いいえ、思い通りに SELECT を使用することはできません。

CASEを使用した例では、CASE「ステートメント」を使用していません.CASEを使用していますが、これはたまたまSQLステートメント内に埋め込まれています。その場合、手続き型ステートメントではなく SQL ステートメントのコンテキスト内にあるため、サブクエリを使用できます。手続き型の CASE ステートメントでは、このようなサブクエリを使用することはできません。

于 2009-05-01T11:54:55.353 に答える
0

DBMS_OUTPUT.ENABLEを呼び出しましたか

簡単な例

BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.PUT_LINE('Disabled');
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('Enabled');
END;
于 2009-05-01T10:46:27.640 に答える
0

サブクエリが IF 条件でサポートされているとは思えません... PL/SQL は、SELECT が式/ステートメントで使用される単一の値ではなく、一連のレコードを与えることを期待します。

于 2009-05-01T11:24:09.407 に答える