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

मैं एक बाधा के कॉलम नाम (नामों) को वापस करने के लिए फ़ंक्शन कैसे बना सकता हूं?

आप SYS_REFCURSOR का उपयोग कर सकते हैं मानक आंतरिक डेटा प्रकारों जैसे VARCHAR2 . के बजाय जैसा कि आपके मामले में एकाधिक पंक्तियों को वापस करने में सक्षम होने के लिए है। INTO क्लॉज के साथ एक सेलेक्ट स्टेटमेंट कई पंक्तियों को वापस नहीं कर सकता है, और वर्तमान त्रुटि संदेश (ORA-01422 ) चोट पहुँचाता है।

इस प्रकार, एक संग्रहित फ़ंक्शन बनाएं जिसमें SYS_REFCURSOR . हो पहला :

SQL> CREATE OR REPLACE FUNCTION GET_CONSTRAINT_COLUMNS(iTableName      IN VARCHAR2,
                                                       iConstraintName IN VARCHAR2)
                         RETURN SYS_REFCURSOR AS
  wkeys SYS_REFCURSOR;
  v_sql VARCHAR2(32767);
BEGIN

  v_sql := 'SELECT column_name
              FROM user_cons_columns
             WHERE constraint_name = :ic
               AND table_name = :it';

  OPEN wkeys FOR v_sql USING iconstraintname, iTableName;
  RETURN wkeys;
END;
/

और फिर SQL डेवलपर के कंसोल से इस रूप में कॉल करें

SQL> DECLARE
    wConsumable SYS_REFCURSOR;
BEGIN
   :wConsumable := GET_CONSTRAINT_COLUMNS('PRODUCTS',  'PRODUCTSPK');
END;
/

SQL> PRINT wConsumable ;
  • पहला SQL(CURSOR Extract_KEY के लिए तैयार) ) बेमानी है;
  • दो के बीच कोई अंतर नहीं है SELECT LOOP . के भीतर बयान ,बीटीडब्ल्यू LOOP इस वर्तमान मामले का उपयोग करने की आवश्यकता नहीं है;
  • कमांड PRINT DBMS_OUTPUT.PUT_LINE . के बजाय इस्तेमाल किया जा सकता है SYS_REFCURSOR . का परिणाम लौटाने के लिए ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में डिफ़ॉल्ट बाधा नाम क्या है?

  2. टूटी हुई उप-चयन वाली क्वेरी के परिणामस्वरूप त्रुटि होनी चाहिए लेकिन पंक्तियों को वापस करना चाहिए

  3. दो डेटाबेस तालिकाओं के बीच डेटा की तुलना के आधार पर ऑरैकल व्यू बनाएं

  4. ओरेकल के साथ एन-हाइबरनेट में लंबे तार त्रुटि का कारण बनते हैं

  5. Oracle 10g पर विशेष तालिका (पढ़ें) लॉक?