मैं Oracle में वेरिएबल्स की घोषणा और उपयोग कैसे करूँ?


18

मेरा मुख्य कौशल एसक्यूएल सर्वर के साथ है, लेकिन मुझे ओरेकल क्वेरी के कुछ ट्यूनिंग करने के लिए कहा गया है। मैंने निम्नलिखित एसक्यूएल लिखा है:

declare @startDate int
select @startDate = 20110501

और मुझे यह त्रुटि मिलती है:

declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

मैं Oracle में वेरिएबल्स की घोषणा और उपयोग कैसे करूँ?

जवाबों:


18

अंदर pl / sql ब्लॉक:

declare
 startdate number;
begin
  select 20110501 into startdate from dual;
end;
/

बाइंड चर का उपयोग करना:

var startdate number;
begin
  select 20110501 into :startdate from dual;
end;
/

PL / SQL प्रक्रिया सफलतापूर्वक पूर्ण हुई।

SQL> print startdate

 STARTDATE
----------
  20110501

एक प्रश्न में:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */

यह दुर्भाग्य से मेरे लिए काम नहीं करता है। var my_num NUMBER; BEGIN का चयन करें 12345 में my_num दोहरी से; समाप्त; / select * my_table sa से जहां sa.my_col =: my_num;
मैथ्यू

आपको क्या त्रुटि मिल रही है? (बस परीक्षण और काम करता है)
ik_zelf

मैंने वास्तव में जॉन ऑफ ऑल ट्रेड्स द्वारा पोस्ट किए गए समाधान की कोशिश की और मेरी आवश्यकताओं के लिए पूरी तरह से काम किया - अर्थात DEFINE का उपयोग करना और & के साथ चर का संदर्भ देना।
मैथ्यू

3

SQL * प्लस एक अतिरिक्त प्रारूप का समर्थन करता है:

DEFINE StartDate = TO_DATE('2016-06-21');
DEFINE EndDate   = TO_DATE('2016-06-30');

SELECT
    *
FROM
    MyTable
WHERE
    DateField BETWEEN &StartDate and &EndDate;

एम्परर्सैंड पर ध्यान दें जहां प्रतिस्थापन क्वेरी के भीतर किया जाना है।


यह मेरे लिए टॉड में ओरेकल के लिए काम करता है जब इनमें से किसी भी फ़ंक्शन का उपयोग किया जाता है: Execute as scriptया Execute via Toad script runnerया Execute via SQL*Plus। हालाँकि, यदि आप Execute/compile statement at caretइसके साथ चलने का प्रयास करते हैं तो एक त्रुटि संदेश देता है: "ORA-009000: अमान्य SQL कथन"।
SherlockSpreadsheets
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.