私は仕事で次のPL/SQLコード(変数が変更された)が発生しました:私は、上記には、次のと同等だと思うリファクタリングPL/SQL
PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
IF i_w IS NULL THEN
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z;
ELSE
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND a.w=i_w;
END IF;
END test;
を:
PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND NVL(a.w,1)=NVL(NVL(i_w,a.w),1);
END test;
ことはありません同じですか?誰かが、 元のバージョンを使用する理由はありますか? 元のカーソルは50行のクエリであるため、リファクタリングによって読みやすさが向上し、シンプルに保たれる可能性があります。
編集:
ケビン・バートンの答えで問題に対処するために、私は、WHERE条件を更新しました。 a.wあなたはケビン・バートンが言ったように
a.w=NULL
ありがとうKevin。私は質問を更新しました。 – digdug