2012-11-20 2 views
7

사용자 입력없이 sqlplus 스크립트에서 매개 변수의 기본값을 설정하는 방법이 있습니까?paramteters의 기본값이 전달되지 않음 SQLPlus 스크립트

예를 들어, 나는 SQL 스크립트 sessions.sql 있습니다

 
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 
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 조건을 적용하기 위해 수행해야 할 팁이나 트릭이 있습니까?

 
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 

답변

6

질문에 대한 대답을 "On SQL*Plus Defines"을 읽어 보시기 바랍니다 :

솔루션

마틴에 의해 링크 된 기사에 따르면 나는 이전 스크립트 매개 변수 값 aksing없이 작동하도록 수정.

+0

멋진 기사를 가리키는 주셔서 대단히 감사합니다. – adrive

0

언제든지 사라질 수있는 링크를 쫓고 낭독하지 않는 사람들을 위해 빠른 cut'n 붙여 넣기 스 니펫이 있습니다.

set termout on 
set serveroutput on 
set feedback off 
set verify off 

-- start 
column 1 new_value 1 noprint 
select '' "1" from dual where rownum = 0; 
define param = &1 "default" 
-- end 

begin 
    dbms_output.put_line ('Param 1 value is &param'); 
end; 
/

exit 0 
/

실행 :
파람 1 개 값 a.sql ORCL @ @

$ SQLPLUS -s SCOTT/TIGER 기본
입니다 $ SQLPLUS -s POSF/POSF @ ECMDB @ a.sql nondef
param 1 값은 nondef입니다.

관련 문제