आपको में . चुनना होगा कुछ। यदि आप नहीं करते हैं तो निष्पादित भी नहीं किया गया (हालांकि इसे पार्स किया गया है)।
create or replace procedure select_procedure
as
l_name student.name%TYPE;
l_surname student.name%TYPE;
begin
execute immediate
'select name, surname
from student
where id_student = 1'
into l_name, l_surname;
end;
/
लेकिन, किसी विशेष क्रम में नहीं:(ए) आपको डायनामिक स्टेटमेंट में शाब्दिक मान 1 को एम्बेड करने के बजाय बाइंड वेरिएबल्स का उपयोग करना चाहिए; (बी) इसे गतिशील होने की आवश्यकता नहीं है; और (सी) कॉलर वैसे भी क्वेरी द्वारा लौटाए गए मानों को नहीं देख पाएगा - जब तक कि आप OUT
में चयन नहीं करते इसके बजाय तर्क, या उन्हें dbms_output()
. के साथ प्रदर्शित करें (हालांकि यह वास्तव में केवल डिबगिंग के लिए उपयोग किया जाना चाहिए क्योंकि आप यह नियंत्रित नहीं कर सकते कि क्लाइंट इसे दिखाएगा)।
तो आप यह कर सकते हैं:
create or replace procedure select_procedure
as
l_name student.name%TYPE;
l_surname student.name%TYPE;
begin
select name, surname
into l_name, l_surname
from student
where id_student = 1;
dbms_output.put_line('name=' || l_name ||', surname=' || l_surname);
end;
/
या
create or replace procedure select_procedure (
p_name OUT student.name%TYPE,
p_surname OUT student.name%TYPE
)
as
begin
select name, surname
into p_name, p_surname
from student
where id_student = 1;
end;
/
और अपने कॉलर को पॉप्युलेट करने के लिए अपने स्वयं के परिवर्तनीय नामों में पास करें, और उसके बाद जो कुछ भी चाहिए उसे करें। कॉलर आमतौर पर उस आईडी में भी पास होगा जिसे आप ढूंढ रहे हैं, इसलिए आपके पास 1 हार्ड-कोडेड नहीं है।
हालांकि ऐसा नहीं लगता कि इसके लिए एक प्रक्रिया वास्तव में सबसे अच्छा तंत्र है।
साथ ही, एक select ... into
. का उपयोग करके (स्थिर या गतिशील) त्रुटि होगी यदि क्वेरी शून्य पंक्तियों या एक से अधिक पंक्तियों को लौटाती है। यह केवल तभी काम करेगा जब ठीक एक पंक्ति वापस आ जाए। एक कर्सर कितनी भी पंक्तियों को संभाल लेगा - लेकिन जब तक आप केवल परिणाम प्रिंट नहीं कर रहे हैं (जैसा कि @ जयंत दिखाता है) आपको इसके बजाय कर्सर को कॉलर को वापस पास करने की आवश्यकता है। आप bulk collect into
. कर सकते हैं इसके बजाय एक संग्रह, लेकिन आपको अभी भी उसके साथ कुछ करना होगा।