これは機能します:
select salary from(select salary、rownum as rn from(select salaryfrom e_salary order by salary desc))where rn =2;
動作しない理由:
ROWNUMを行に割り当てる場合、Oracleは1から開始し、行が選択された場合にのみ値をインクリメントします。つまり、WHERE句のすべての条件が満たされたときです。この条件ではROWNUMが2より大きい必要があるため、行は選択されず、ROWNUMが1を超えてインクリメントされることはありません。
あなたが今はっきりしていることを願っています。