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

ग्रोवी ओरेकल संग्रहित प्रक्रिया - अमान्य स्तंभ अनुक्रमणिका

निम्नलिखित कोड आपको SYS_REFCURSOR का चर प्राप्त करने में मदद कर सकता है Oracle अनाम ब्लॉक से।

हमें कुछ प्रमुख विवरणों पर ध्यान देना चाहिए:

  1. कक्षा groovy.sql.Sql संगत OutParameter नहीं है और हम इसे मैन्युअल रूप से CURSOR_PARAMETER . के रूप में बनाते हैं और इसे sql.call . पर पास करें विधि
  2. मान लें कि ब्लॉक {call DECLARE . से शुरू होता है और END } . के साथ समाप्त होता है END के बाद अर्धविराम के बिना। अन्यथा हम एक खराब पहचानने योग्य SQLException प्राप्त कर सकते हैं चेहरे पर।
  3. प्रश्न चिह्न ? sqlString के अंदर पैरामीटर बाइंडिंग के लिए स्थान हैं। बाइंडिंग को प्राकृतिक क्रम में parametersList . से मान लेते हुए बनाया जाता है .
    • इस उदाहरण में हमारे पास केवल बाध्यकारी है, इसलिए ? मान को OUT मानकर CURSOR_PARAMETER के साथ आबद्ध हो जाता है पारित प्रकार का पैरामीटर;
  4. sql.call . के बाद केवल एक ही प्रवेश बंद होता है और ResultSet rs कर्सर की पंक्तियाँ प्रदान करें my_cur अनाम ब्लॉक में घोषित।
  5. हम sqlString को सरल बना सकते हैं SYS_REFCURSOR returning लौटाने वाले फ़ंक्शन का उपयोग करके OUT . के साथ एक प्रक्रिया के बजाय पैरामीटर। तो यह कुछ इस तरह दिख सकता है "{call BEGIN ? := MY_FUNC(); END}" या यहां तक ​​कि "{? = call MY_FUNC()}"
import groovy.sql.OutParameter
import groovy.sql.Sql
import oracle.jdbc.OracleTypes

import java.sql.ResultSet

def driver = 'oracle.jdbc.driver.OracleDriver'
def sql = Sql.newInstance('jdbc:oracle:thin:@my-server:1521:XXX', 'usr', 'psw', driver)

// special OutParameter for cursor type
OutParameter CURSOR_PARAMETER = new OutParameter() {
    public int getType() {
        return OracleTypes.CURSOR;
    }
};

// look at some ceremonial wrappers around anonymous block
String sqlString = """{call
    DECLARE
      my_cur SYS_REFCURSOR;
    BEGIN
        STORED_PROCEDURE_NAME(my_cur);
        ? := my_cur;
    END
}
""";

// the order of elements matches the order of bindings
def parametersList = [CURSOR_PARAMETER];


// rs contains the result set of cursor my_cur
sql.call(sqlString, parametersList) { ResultSet rs ->
  while (rs.next()) {
      println rs.getString("my_column")
  }
};

पी.एस. और सवाल के लिए धन्यवाद।




  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. .crt और .key फ़ाइल से .jks बनाना, क्या यह संभव है

  3. ओरेकल एक्सप्रेस 11g अपवाद अजीब

  4. क्वेरी निष्पादन समय में भारी वृद्धि करके समूह बनाएं

  5. सार्वजनिक समानार्थी बनाम स्कीमा.वस्तु पैटर्न