@
एक SQL*Plus कमांड
है पीएल/एसक्यूएल में इसका कोई अर्थ नहीं है। आपकी स्क्रिप्ट को पार्स समय पर PL/SQL ब्लॉक में शामिल किया जा रहा है, जिसे आप देख सकते हैं कि क्या आप list
बफर में कोड। आपके नियंत्रण खंड में घोषित चर प्रतिस्थापन की आवश्यकता के बिना सीधे 'शामिल' कोड के लिए उपलब्ध हैं।
उदाहरण के तौर पर, अगर uitvoer.sql
बस इसमें शामिल हैं:
dbms_output.put_line(v_s);
फिर यह नियंत्रण स्क्रिप्ट:
set serveroutput on
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql
end;
/
list
उत्पादन:
Test
PL/SQL procedure successfully completed.
1 declare
2 v_s varchar2(10) := 'Test';
3 begin
4 dbms_output.put_line(v_s);
5* end;
बफ़र में PL/SQL ब्लॉक में शामिल कोड है, नहीं uitvoer.sql
. का संदर्भ . लेकिन शामिल कोड ने काम किया क्योंकि यह नियंत्रण स्क्रिप्ट से एक चर को संदर्भित करता था जो अभी भी दायरे में था।
यदि आप uitvoer.sql
. को अनुमति देते हुए अलग-अलग नामों वाले नियंत्रण चरों की अनुमति देना चाहते हैं शायद अधिक लचीले ढंग से कहे जाने के लिए, आप अभी भी प्रतिस्थापन चर का उपयोग कर सकते हैं, लेकिन आप अभी भी चर नाम को प्रतिस्थापित कर रहे हैं, इसके मूल्य को नहीं। उदाहरण के लिए, इसके साथ uitvoer.sql
(ध्यान दें कि प्रतिस्थापन चर असगिनमेंट नहीं . करता है इसके चारों ओर उद्धरण हैं):
declare
variable_s varchar2(10);
begin
variable_s := &&1;
dbms_output.put_line(variable_s);
end;
और आपकी नियंत्रण स्क्रिप्ट चर नाम से गुजरती है:
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql v_s
end;
/
आप देखते हैं:
old 7: variable_s := &&1;
new 7: variable_s := v_s;
Test
PL/SQL procedure successfully completed.
1 declare
2 v_s varchar2(10) := 'Test';
3 begin
4 declare
5 variable_s varchar2(10);
6 begin
7 variable_s := &&1;
8 dbms_output.put_line(variable_s);
9 end;
10* end;