2012-11-20 14 views
7

पारित नहीं वहाँ उपयोगकर्ता इनपुट के बिना sqlplus लिपि में पैरामीटर का डिफ़ॉल्ट मान सेट करने के लिए कोई तरीका है?डिफ़ॉल्ट मूल्य 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> 

मैं केवल पैरामीटर के लिए एक खाली मूल्य पारित कर सकते हैं जब मुझे इसे दर्ज करने के लिए कहा जाता है, या मैं स्क्रिप्ट नाम के बाद खाली पैरामीटर पास करने में सक्षम हूं। लेकिन यह व्यवहार बहुत परेशान है। यदि परिभाषित के कुछ प्रकार "& 1" बहुत उपयोगी हो जाएगा।

आप किसी भी सुझाव या चाल यह कैसे लागू करने के लिए कहां sqlplus स्क्रिप्ट wheter पैरामीटर में स्थिति या परिभाषित किया गया है अनावश्यक उपयोगकर्ता सहभागिता के बिना नहीं हासिल किया जाना चाहिए है?

समाधान

लेख मार्टिन से जुड़े हुए के अनुसार मैं संशोधित पिछले स्क्रिप्ट पैरामीटर मान के लिए 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 

उत्तर

6

कृपया अपने प्रश्न का उत्तर के लिए "On SQL*Plus Defines" पढ़ें।

+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 
/

निष्पादन:

$ sqlplus -s स्कॉट/a.sql
परम 1 मूल्य TIGER @ ORCL @ डिफ़ॉल्ट
है $ sqlplus -s POSF/POSF @ ECMDB @ a.sql nondef
पैरा 1 मान nondef

संबंधित मुद्दे