ユーザー入力なしでsqlplusスクリプトでparamterのデフォルト値を設定する方法はありますか?paramtetersのデフォルト値は渡されませんSQLPlusスクリプト
SET VERIFY OFF SET TERMOUT OFF DEFINE uname = '&1' COLUMN search_uname new_value search_uname SELECT CASE WHEN '&uname' = '' THEN '%' ELSE UPPER('&uname') END AS search_uname FROM dual; SET TERMOUT ON SELECT sid, serial, username FROM v$session WHERE username LIKE '&search_uname';
そして、私はこのようなSQLPLUSからそれを呼び出したい:
例えば、私はSQLスクリプトsessions.sql持っ
SQL> @sessions Enter value for 1: SID SERIAL# USERNAME ---------- ---------- ------------------------------ 56 20577 CONTEXT ..... 236 rows selected. SQL> @sessions "" SID SERIAL# USERNAME ---------- ---------- ------------------------------ 56 20577 CONTEXT ..... 236 rows selected. SQL> @sessions SDE SID SERIAL# USERNAME ---------- ---------- ------------------------------ 113 56675 SDE 165 64881 SDE ..... 43 rows selected. SQL>
を私は唯一のパラメータのために空の値を渡すことができます私はそれを入力するように頼まれたとき、またはスクリプト名の後に空のパラメータを ""で渡すことができます。しかし、この行動は非常に迷惑です。 IF定義のある種類の "& 1"は非常に便利です。
不要なユーザー操作を行わずにsqlplusスクリプトwheterパラメーターが定義されているWHERE条件を適用するためのヒントやヒントがありますか?
ソリューション
マーティンによってリンク先の記事によると、私は、パラメータ値のためaksingなく動作するように、以前のスクリプトを修正:
SET VERIFY OFF SET TERMOUT OFF column 1 new_value 1 SELECT '' "1" FROM dual WHERE ROWNUM = 0; define uname = '&1' SET TERMOUT ON SELECT sid, serial#, username FROM v$session WHERE username LIKE UPPER(DECODE('&uname', '', '%', '&uname')); undefine 1
私に素晴らしい記事を指摘していただきありがとうございます。 – adrive