Oracle 11g に変換しようとしている SQL Server に次のクエリがあります。
IF '[Param.1]' = 'S' OR '[Param.1]' = 'T' THEN
select * from ULQUEUE
END IF
しかし、Oracle で同じクエリを作成すると、無効な SQL ステートメントを示すエラーが発生します。では、Oracle の Select ステートメントに IF-ELSE を組み込むにはどうすればよいでしょうか。
Oracle 11g に変換しようとしている SQL Server に次のクエリがあります。
IF '[Param.1]' = 'S' OR '[Param.1]' = 'T' THEN
select * from ULQUEUE
END IF
しかし、Oracle で同じクエリを作成すると、無効な SQL ステートメントを示すエラーが発生します。では、Oracle の Select ステートメントに IF-ELSE を組み込むにはどうすればよいでしょうか。
T-SQL ステートメントを変換しています。Oracle でこれに相当するのは、無名 PL/SQL ブロックです。
ただし、PL/SQL は T-SQL よりも少し要求が厳しいです。行を変数に選択する必要があります。クエリが複数の行を返す場合は、コレクション変数を定義するか、カーソルを使用する必要があります。
要件に応じて、次のようなものを作成できます。
begin
if ( &¶m1 = 'S' or &¶m1 = 'T' ) then
for lrec in ( select * from ulqueue ) loop
do_something;
end loop;
end if;
end;
/
これは T-SQL よりも手間がかかるように見えることに同意しますが、PL/SQL はより多くの機能を備えた適切なプログラミング言語です。 詳細をご覧ください。