विंडोज़ के लिए SQL*प्लस स्क्रिप्ट:
set define "&"
set verify off
define mytable = dual
accept param prompt "Enter option 1-9: "
-- Generate a script named prompt_for_tablename.sql which prompts the user for a table name
-- or does nothing, depending on the value of ¶m:
set termout off
column mytable new_value mytable
set head off feedback off
spool prompt_for_tablename.sql
select 'accept mytable char prompt "Enter table name: "' as prompt from dual where ¶m = 1;
spool off
set termout on head on feedback on
@prompt_for_tablename.sql
host del prompt_for_tablename.sql
declare
vari_axu number;
begin
if ¶m = 1 then
dbms_output.put_line ('work here');
select count(*) into vari_axu from &mytable ;
dbms_output.put_line('Count of &mytable: ' || vari_axu);
return;
end if;
dbms_output.put_line ('do not work' );
end;
/
यदि उपयोगकर्ता 1
. में प्रवेश करता है पहले प्रॉम्प्ट पर, जेनरेट की गई स्क्रिप्ट prompt_for_tablename.sql
तालिका नाम के लिए संकेत देगा। किसी अन्य मूल्य के लिए, यह कुछ नहीं करेगा।
फिर prompt_for_tablename.sql
चलाया जाता है (और तुरंत हटा दिया जाता है, क्योंकि हमें अब इसकी आवश्यकता नहीं है)। अब &mytable
इसमें या तो स्क्रिप्ट की शुरुआत से इसका डिफ़ॉल्ट मान होता है, या उपयोगकर्ता द्वारा प्रॉम्प्ट पर जो कुछ भी दर्ज किया जाता है।
जोड़ा गया:दो चर वाला संस्करण
यह एक गतिशील क्वेरी बनाता है:
select count(*) into vari_axu from &mytable where created > date '&busdate';
डेमो उद्देश्यों के लिए आप तालिका का नाम user_objects
. के रूप में दर्ज कर सकते हैं (जहां created
दिनांक स्तंभ है)।
स्पष्ट रूप से इस प्रकार का निर्माण जटिल और त्रुटि-प्रवण हो जाता है क्योंकि उपयोगकर्ता को एक तालिका निर्दिष्ट करनी चाहिए जिसमें अपेक्षित कॉलम नाम हो, इसलिए मुझे यकीन नहीं है कि मैं इस पथ से बहुत दूर जाने की सलाह देता हूं, लेकिन वैसे भी:
set define "&"
set verify off
define mytable = dual
define busdate = "0001-01-01"
define if_param_is_1 = "--"
accept param prompt "Enter option 1-9: "
-- Generate a script named prompt_for_tablename.sql which prompts the user for a table name
-- or does nothing, depending on the value of ¶m:
set termout off
column mytable new_value mytable
column if_param_is_1 new_value if_param_is_1
set head off feedback off
spool prompt_for_tablename.sql
select prompt, null as if_param_is_1 -- uncomment
from
(
select 'accept mytable char prompt "Enter table name: "'||chr(13)||chr(10) as prompt from dual
union all
select 'accept busdate date format ''YYYY-MM-DD'' prompt "Enter business date (YYYY-MM-DD): "' from dual
)
where ¶m = 1;
spool off
set termout on head on feedback on
@prompt_for_tablename.sql
host del prompt_for_tablename.sql
declare
vari_axu number;
begin
&if_param_is_1 dbms_output.put_line ('work here');
&if_param_is_1 select count(*) into vari_axu from &mytable where created > date '&busdate';
&if_param_is_1 dbms_output.put_line('Count of &mytable created after &busdate: ' || vari_axu);
&if_param_is_1 return;
dbms_output.put_line ('do not work' );
end;
/
टेस्ट पासिंग परम 2 के रूप में:
SQL> @demo
Enter option 1-9: 2
do not work
PL/SQL procedure successfully completed.
टेस्ट पासिंग परम 1 के रूप में:
SQL> @demo
Enter option 1-9: 1
Enter table name: user_objects
Enter business date (YYYY-MM-DD): 2010-01-01
work here
Count of user_objects created after 2010-01-01: 93772
PL/SQL procedure successfully completed.
(आप successfully completed
को दबा सकते हैं set feedback off
. के साथ संदेश ।)