2011-11-07 26 views
6

एक घंटे शोध मैं यह पता लगाने की कैसे सही ढंग से एक चर को परिभाषित करने और फिर अपने एसक्यूएल में इसका इस्तेमाल नहीं कर पा रहे खर्च करने के बावजूद।सरल ओरेकल चर एसक्यूएल असाइनमेंट

ORA-06,550:: पंक्ति 1, स्तंभ 63:

जिनमें से

DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');

मैं जवाब मिल: PLS-00,103:

यह मैं अब तक क्या उत्पादन किया है है का सामना किया निम्नलिखित में से किसी एक की अपेक्षा करते समय "एंड-ऑफ-फाइल":

फ़ंक्शन पैकेज प्रगामा प्रक्रिया उप प्रकार प्रकार का उपयोग फ़ॉर्म वर्तमानप्रारंभ करेंकर्सर

विवरण: DECLARE प्रारंभ दिनांक दिनांक: = to_date ('03/11/2011 ', ' डीडी/मिमी/yyyy '); जब में से एक की उम्मीद कर निम्नलिखित का सामना किया प्रतीक "अंत के फ़ाइल":

शुरू समारोह पैकेज pragma प्रक्रिया उप प्रकार प्रकार उपयोग प्रपत्र लाइन 1, स्तंभ 63:: PLS-00,103 लाइन 1 ORA-06,550 पर त्रुटि वर्तमान कर्सर

मुझे यह पता लगाना अच्छा लगेगा कि इस तरह का एक सरल कार्य कैसे करें!

+3

चर एक ग्राहक निर्माण हैं। आपको हमें यह बताना होगा कि आप किस ग्राहक का उपयोग कर रहे हैं। – APC

+0

@ एएपीसी - मैं TOAD –

उत्तर

10

आपकी परिवर्तनीय घोषणा सही है।

DECLARE कीवर्ड एक PL/SQL ब्लॉक (जिनके शरीर BEGIN और END; द्वारा सीमांकित किया जाता है) में scoped चर निर्धारित किया जाता है। आप इस चर का उपयोग कैसे करना चाहते हैं?

निम्नलिखित PL/SQL मेरे लिए ठीक काम करता है:

DECLARE 
    startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy'); 
    reccount INTEGER; 
BEGIN 
    SELECT count(*) INTO reccount 
     FROM my_table tab 
     WHERE tab.somedate < startDate; 
    dbms_output.put_line(reccount); 
END; 

तुम भी सरल स्ट्रिंग प्रतिस्थापन चर का उपयोग करने के लिए DEFINE कथन का उपयोग कर सकते हैं। वे एसक्यूएल/प्लस या टॉड जैसे क्लाइंट के लिए उपयुक्त हैं।

DEFINE start_date = "to_date('03/11/2011', 'dd/mm/yyyy')" 
SELECT COUNT(*) from my_table tab where tab.some_date < &start_date; 
+1

का उपयोग कर रहा हूं तो क्या एमएस एसक्यूएल में संक्षेप में ऐसा करने का कोई तरीका नहीं है, जहां यह एक सरल 'घोषणा @ परिवर्तनीय सेट @ चर' है? मैं बाद में 'WHERE' खंड में चर का उपयोग करना चाहता हूं, मैं यह कैसे करूँगा? मैं वैरिएबल को स्क्रीन पर प्रिंट कैसे करूं? –

+0

मैं एमएस एसक्यूएल से परिचित नहीं हूं, लेकिन यदि आप किसी प्रकार के वैश्विक चर का जिक्र कर रहे हैं, तो पैकेज में एक वैरिएबल को परिभाषित करना संभव है, इस प्रकार यह सभी पैकेज के सदस्यों को दिखाई दे रहा है, भले ही वैश्विक चर कुछ आप हैं शायद बचाना चाहूंगा। आप वैरिएबल को ['dbms_output.put_line'] (http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_output.htm#i1000105) का उपयोग कर स्क्रीन पर प्रिंट कर सकते हैं। –

+0

कोई वैश्विक चर नहीं - केवल एक सामान्य चर जो मैं असाइन कर सकता हूं और उसके बाद –

3

मन में लें कि Oracle की PL/SQL एसक्यूएल नहीं है।

PL/SQL एक प्रक्रियात्मक भाषा है। एसक्यूएल प्रक्रियात्मक नहीं है, लेकिन आप "चर" को परिभाषित कर सकते हैं जिसे उपयोगकर्ता "& var" वाक्यविन्यास के माध्यम से दर्ज कर सकता है (http://www.orafaq.com/node/515 देखें)।

5

क्या आप टॉड में प्रयास कर रहे हैं पूरा करने के लिए, आप बिल्कुल चर घोषित करने के लिए जरूरत नहीं है। जब आप क्वेरी निष्पादित करते हैं तो बस एक कोलन और टोड के साथ अपने चर को पूर्ववर्ती करने के लिए चर के मूल्य के लिए संकेत मिलेगा। उदाहरण के लिए:

select * from all_tables where owner = :this_is_a_variable; 

यदि यह शुरू में काम नहीं करता है, कहीं भी संपादक में राइट क्लिक करें और सुनिश्चित करें कि "प्रतिस्थापन चर के लिए संकेत" चिह्नित है।

तुम सच में (या आप एसक्यूएल * प्लस में एक ही बात करने के लिए सक्षम होना चाहता हूँ) के रूप में, आप इसे लिख सकते हैं जिस तरह से एसक्यूएल सर्वर चर हैंडल करने के लिए इसी तरह यह करने के लिए करना चाहते हैं:

var this_is_a_variable varchar2(30); 

exec :this_is_a_variable := 'YOUR_SCHEMA_NAME'; 

print this_is_a_variable; 

select * from all_tables where owner = :this_is_a_variable; 

हालांकि, यह काम टॉड में करने के लिए, आपको "निष्पादन कथन" कमांड के बजाय "स्क्रिप्ट के रूप में निष्पादित करें" के माध्यम से इसे चलाने की आवश्यकता होगी।

0

आप इस प्रयास करें कर सकते हैं:

DEF startDate = to_date('03/11/2011', 'dd/mm/yyyy'); 
Select &startDate from dual; 
3

यह एक पुरानी पोस्ट है, लेकिन इस मामले में किसी को भी इस पर ठोकर (जैसा कि मैंने अभी किया), तो आपको एक CTE के साथ इस संभाल कर सकते हैं:

with params as (
     select date '2011-11-03' as startdate 
     from dual 
    ) 
select . . . 
from params cross join 
    . . . 

लगभग उसी वाक्यविन्यास SQL ​​सर्वर में काम करता है (date-विशिष्ट सामग्री और from dual से कम)।

संबंधित मुद्दे