Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

मैं बाहरी एसक्यूएल फ़ाइल (एसक्यूएल * प्लस के साथ पीएल/एसक्यूएल) के लिए एक परिवर्तनीय तर्क पास करना चाहता हूं

@ एक 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक रिकॉर्ड पर Oracle अधिकतम तिथि चुनें

  2. एक लंबी रॉ की लंबाई प्राप्त करें

  3. ओरेकल ट्रेस फ़ाइल से गतिरोध त्रुटि का कारण ढूँढना

  4. क्या Oracle sqlldr समानांतर में कई INFILE को प्रोसेस करता है

  5. Oracle प्रदर्शन और ट्यूनिंग प्रश्नोत्तरी