ユーザー入力なしでsqlplusスクリプトでparamterのデフォルト値を設定する方法はありますか?
たとえば、SQLスクリプトsessions.sqlがあります。
確認をオフに設定 タームアウトをオフに設定 DEFINE uname ='&1' COLUMN search_uname new_value search_uname SELECT CASE WHEN'&uname' ='' THEN'%' ELSE UPPER('&uname')END AS search_uname デュアルから; TERMOUTをオンに設定 SELECT sid、serial、username FROM v $ session WHERE username LIKE'&search_uname';
そして、私は次のようにsqlplusからそれを呼び出したいと思います:
SQL> @sessions 1の値を入力します: SID SERIAL#USERNAME ---------- ---------- ------------------------------ 5620577コンテキスト ....。 236行が選択されました。 SQL> @sessions "" SID SERIAL#USERNAME ---------- ---------- ------------------------------ 5620577コンテキスト ....。 236行が選択されました。 SQL> @sessions SDE SID SERIAL#USERNAME ---------- ---------- ------------------------------ 113 56675 SDE 165 64881 SDE ....。 43行が選択されました。 SQL>
パラメータに空の値を渡すことができるのは、入力を求められたときだけです。または、スクリプト名の後に「」を介して空のパラメータを渡すことができます。しかし、この動作は非常に厄介です。ある種のIFDEFINED"&1"は非常に便利です。
パラメータが定義されているかどうかにかかわらず、sqlplusスクリプトのWHERE条件を適用するためにこれをどのように達成する必要があるかについてのヒントやコツはありますか?
解決
Martinによってリンクされた記事によると、以前のスクリプトを変更して、パラメーター値を確認せずに機能するようにしました。
確認をオフに設定 タームアウトをオフに設定 列1new_value1 SELECT'' "1" FROM dual WHERE ROWNUM = 0; uname ='&1'を定義する TERMOUTをオンに設定 SELECT sid、serial#、username FROM v $ session WHERE username LIKE UPPER(DECODE('&uname'、''、'%'、'&uname')); 未定義1