दिलचस्प पोस्ट
स्रोतों को बिना लिपटे स्क्रिप्ट के निर्माण के लिए सेंकम प्राप्त करना? जावाएफएक्स के वेबइंजिन / वेबव्यू का उपयोग करके कुकी सेट करना सूची में से यादृच्छिक तत्व चुनें <T> सी # में एएसपी.नेट वेब एपीआई – पुट और डेलेटे वर्ब्स को अनुमति नहीं है – IIS 8 पावरशेल्ड नेस्टेड उद्धरण चिह्नों के साथ एमएसबिल्ड को कॉल करें जावास्क्रिप्ट में मैं गतिशील रूप से स्थानीय क्षेत्र तक कैसे पहुंच सकता हूं? पारभासी फ्रेम / पैनल / घटक पर फिर से पेंट करें। WSGIDaemon प्रोसेसिंग के साथ डीजेन्गा एपाचे कॉन्फ़िगरेशन काम नहीं कर रहा है C ++ फ़ंक्शन पॉइंटर प्रकार के रूप में कक्षा विधि का उपयोग करना मुख्य श्रेणी वाली .class फ़ाइल के लिए निर्देशिका पथ प्राप्त करना PHP: स्प्लिट स्ट्रिंग Socket.io 1.x: केवल WebSockets का उपयोग करें? फिक्स्ड आवरण के साथ बूटस्ट्रैप ग्रिड – स्टैकिंग से स्तंभ रोकें दिए गए फ़ाइल वाले फाइल सिस्टम के आकार और रिक्त स्थान खोजें यह सुनिश्चित करने के लिए त्वरित और गंदी तरीका है कि एक खोल स्क्रिप्ट का केवल एक उदाहरण एक समय में चल रहा है

संग्रहीत कार्यविधि से कई पंक्तियों को वापस कैसे करें? (ओरेकल पीएल / एसक्यूएल)

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

Solutions Collecting From Web of "संग्रहीत कार्यविधि से कई पंक्तियों को वापस कैसे करें? (ओरेकल पीएल / एसक्यूएल)"

यहां एक फ़ंक्शन बनाने का तरीका बताया गया है जो एक परिणाम सेट देता है जिसे क्वेरी के रूप में माना जा सकता है जैसे कि वह तालिका थी:

SQL> create type emp_obj is object (empno number, ename varchar2(10)); 2 / Type created. SQL> create type emp_tab is table of emp_obj; 2 / Type created. SQL> create or replace function all_emps return emp_tab 2 is 3 l_emp_tab emp_tab := emp_tab(); 4 n integer := 0; 5 begin 6 for r in (select empno, ename from emp) 7 loop 8 l_emp_tab.extend; 9 n := n + 1; 10 l_emp_tab(n) := emp_obj(r.empno, r.ename); 11 end loop; 12 return l_emp_tab; 13 end; 14 / Function created. SQL> select * from table (all_emps); EMPNO ENAME ---------- ---------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7902 FORD 7934 MILLER 

मुझे लगता है कि आप एक REFCURSOR वापस करना चाहते हैं:

 create function test_cursor return sys_refcursor is c_result sys_refcursor; begin open c_result for select * from dual; return c_result; end; 

अपडेट करें : यदि आपको इसे एसक्यूएल से कॉल करना है, तो टोनी एंड्रयूज की तरह एक टेबल फ़ंक्शन का उपयोग करें।

आप ओरेकल पाइपलाइन फ़ंक्शन का उपयोग कर सकते हैं

असल में, जब आप एक पीएलएसक्यूएल (या जावा या सी) रूटीन चाहते हैं तो एक तालिका के बजाय "स्रोत» डेटा – आप एक पाइपलाइन फ़ंक्शन का उपयोग करेंगे।

सरल उदाहरण – कुछ यादृच्छिक डेटा उत्पन्न करना
इनपुट तर्क के आधार पर आप एन अनूठे यादृच्छिक संख्या कैसे बना सकते हैं?

 create type array as table of number; create function gen_numbers(n in number default null) return array PIPELINED as begin for i in 1 .. nvl(n,999999999) loop pipe row(i); end loop; return; end; 

मान लीजिए हमें कुछ के लिए तीन पंक्तियां चाहिए अब हम दो तरीकों से ऐसा कर सकते हैं:

 select * from TABLE(gen_numbers(3)); 

COLUMN_VALUE


  1 2 3 

या

 select * from TABLE(gen_numbers) where rownum <= 3; 

COLUMN_VALUE


  1 2 3 

pipelied कार्य 1 pipelied फ़ंक्शंस 2

यदि आप इसे सादे एसक्यूएल में इस्तेमाल करना चाहते हैं, तो मैं दुकान की प्रक्रिया को परिणामस्वरूप पंक्तियों (या @ टोनी एंड्रयूज दृष्टिकोण के लिए जाना) के साथ एक टेबल या अस्थायी तालिका भरने दें।
यदि आप @ थिलो के समाधान का उपयोग करना चाहते हैं, तो आपको पीएल / एसक्यूएल का उपयोग करके कर्सर को लूप करना होगा। यहां एक उदाहरण है: (मैंने फ़ंक्शन के बजाय एक प्रक्रिया का उपयोग किया था, जैसे कि @ थिलो ने किया था)

 create or replace procedure myprocedure(retval in out sys_refcursor) is begin open retval for select TABLE_NAME from user_tables; end myprocedure; declare myrefcur sys_refcursor; tablename user_tables.TABLE_NAME%type; begin myprocedure(myrefcur); loop fetch myrefcur into tablename; exit when myrefcur%notfound; dbms_output.put_line(tablename); end loop; close myrefcur; end; 
 create procedure <procedure_name>(p_cur out sys_refcursor) as begin open p_cur for select * from <table_name> end;