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

पैकेज के कर्सर से डेटा चुनें, इसे प्रिंट करें

आपने एक पाइपलाइन फ़ंक्शन को परिभाषित किया है, और इसे कॉल करने का यह तरीका नहीं है:

SQL> begin
  2  Cursor_pkg_func.f_trans(5);
  3  end;
  4  /
Cursor_pkg_func.f_trans(5);
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00221: 'F_TRANS' is not a procedure or is undefined
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored


SQL> 

आपको एक टेबल() फ़ंक्शन का उपयोग करने की आवश्यकता है। हालांकि तब आप अपने कोड में बग खोज लेंगे:

SQL>  select * from table(Cursor_pkg_func.f_trans(5))
  2   /

SMITH
SMITH
SMITH
''''
SMITH
SMITH
SMITH
SMITH
ERROR:
ORA-00028: your session has been killed



273660 rows selected.

SQL> 

नोट मुझे उस सत्र को दूसरे सत्र से मारना था, अन्यथा यह अभी भी चल रहा होगा। तो चलिए फ़ंक्शन को सरल करते हैं और उस व्यर्थ दूसरे लूप से छुटकारा पाते हैं ....

CREATE OR REPLACE PACKAGE BODY Cursor_pkg_func IS
    FUNCTION f_trans (p in number) RETURN outrecset PIPELINED IS
    out_rec outrec_typ;
    BEGIN
        OPEN Cursor_pkg.C1;
        LOOP
            FETCH Cursor_pkg.C1 INTO Cursor_pkg.row_emp;
            EXIT when Cursor_pkg.C1%NOTFOUND;
            out_rec.var_char2 := Cursor_pkg.row_emp.last_name;
            PIPE ROW(out_rec);
        END LOOP;
        CLOSE Cursor_pkg.C1;
     RETURN;
     END f_trans;
END Cursor_pkg_func;
/

.... तो लो!

SQL> select * from table(Cursor_pkg_func.f_trans(5))
  2  /

VAR_CHAR2
------------------------------
ADAMS
JAMES
MILLER
SMITH

SQL> 

आपने एक पाइपलाइन फ़ंक्शन बनाया है। आपने ऐसा क्यों किया? आपको ऐसा करने का कारण यह था कि आप एक पीएल/एसक्यूएल फ़ंक्शन चाहते थे जिसका उपयोग एक सेलेक्ट स्टेटमेंट के FROM क्लॉज में किया जा सकता था। पाइपलाइन किए गए कार्यों के लिए यह उपयोग का मामला है। इसलिए कॉल को किसी अनाम PL/SQL ब्लॉक में डालने का वास्तव में कोई मतलब नहीं है।

लेकिन वैसे भी।

कृपया दस्तावेज़ीकरण पढ़ें। यह काफी व्यापक है, यह ऑनलाइन और मुफ़्त है। पीएल/एसक्यूएल संदर्भ में प्रासंगिक खंड स्टेटिक एसक्यूएल पर अध्याय है। यह स्पष्ट करता है कि PL/SQL में सेलेक्ट स्टेटमेंट हमेशा होना चाहिए कुछ विवरण के एक चर में रिकॉर्ड प्राप्त करें। बेनामी पीएल/एसक्यूएल ब्लॉक इस संबंध में संग्रहीत प्रक्रियाओं के समान ही हैं। और जानें .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यूनिक्स टाइमस्टैम्प को दिनांक और दिनांक समय में कनवर्ट करें - SQL/ORACLE

  2. तालिका या दृश्य मौजूद नहीं है

  3. Oracle ऐप्स में FD_LOBS तालिका के बारे में आपको जो बातें अवश्य जाननी चाहिए

  4. ओरेकल | डुप्लिकेट रिकॉर्ड हटाएं

  5. Oracle डेटाबेस ट्रिगर से जावा प्रोग्राम को कॉल करें