C# के इस स्निपेट पर विचार करें:
int v_empno = 7369;
string v_ename;
OracleCommand cmd = con.CreateCommand();
cmd.Parameters.Add("paramEmpno", OracleDbType.Decimal, v_empno, ParameterDirection.Input);
cmd.CommandText = "select e.ename from scott.emp e where e.empno = :1";
v_ename = cmd.ExecuteScalar().ToString();
v_empno
और v_ename
मेजबान चर हैं। यहां आप :1
. के रूप में उपयोग के लिए स्पष्ट रूप से अपना बाइंड वैरिएबल बनाते हैं आपके बयान में।
पीएल/एसक्यूएल के इस स्निपेट पर विचार करें:
declare
v_empno number := 7369;
v_ename varchar2(10);
begin
select e.ename
into v_ename
from scott.emp e
where e.empno = v_empno;
dbms_output.put_line(v_ename);
end;
/
फिर से घोषित चर v_empno
और v_ename
मेजबान चर माना जा सकता है, लेकिन जब वे पीएल/एसक्यूएल कोड के भीतर स्थिर एसक्यूएल में उपयोग किए जाते हैं, तो वे स्वचालित रूप से पीएल/एसक्यूएल कंपाइलर/इंजन द्वारा बाध्य चर में बदल जाते हैं - आपको मैन्युअल रूप से अपना बाइंड वैरिएबल बनाने की ज़रूरत नहीं है सी # उदाहरण। यदि आप उस SQL की जांच करते हैं जिसे वास्तव में PL/SQL के इस टुकड़े द्वारा निष्पादित किया जाता है, तो यह कुछ इस तरह दिखाई देगा:
select e.ename
from scott.emp e
where e.empno = :B1
वह PL/SQL कंपाइलर है जिसने स्वचालित रूप से :B1
. बनाया है आपके v_empno
. के लिए बाइंड वैरिएबल पीएल/एसक्यूएल चर। और यही टॉम काइट का मतलब है कि आप वास्तव में पीएल/एसक्यूएल में होस्ट वैरिएबल और बाइंड वैरिएबल के बीच उचित अंतर नहीं कर सकते हैं। जब आप पीएल/एसक्यूएल लिखते हैं तो पीएल/एसक्यूएल कोड में उपयोग किए जाने पर वेरिएबल होस्ट वैरिएबल होते हैं और साथ ही वे एम्बेडेड एसक्यूएल कोड में उपयोग किए जाने पर बाध्य चर होते हैं। आपको PL/SQL में अंतर करने की आवश्यकता नहीं है, कंपाइलर आपके लिए इसका ख्याल रखता है।