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

ओरेकल में संग्रहित प्रक्रिया में सिंगल कोट्स के साथ वर्कर कैसे पास करें?

एक संग्रह पास करें न कि एक स्ट्रिंग और MEMBER OF का उपयोग करें के बजाय IN :

CREATE OR REPLACE TYPE characterlist IS TABLE OF CHAR(1);
/

CREATE PACKAGE your_package AS
  PROCEDURE countPending(
    pProviderList IN  characterlist
    pCount        OUT INTEGER
  )
  AS
  BEGIN
    SELECT COUNT(*) 
    INTO pCount
    FROM FUND_CHANGE_REQUEST
    WHERE STATUS IN ('PENDING_CHK', 'PEND_2ND_CHK')
    AND PROVIDER  MEMBER OF pProviderList;
  END;
END;
/

तब आप इसे इस प्रकार कह सकते हैं:

DECLARE
  vCount INTEGER;
BEGIN
  your_package.countPending(
    characterlist( 'A', 'B' ),
    vCount
  );
  DBMS_OUTPUT.PUT_LINE( vCount );
END;
/

आप एक स्ट्रिंग पास कर रहे हैं न कि मानों की सूची - इसलिए IN हालत यह देखने के लिए परीक्षण कर रही है कि क्या PROVIDER कॉलम आपकी संपूर्ण इनपुट स्ट्रिंग से बिल्कुल मेल खाता है, न कि, जैसा कि आप मान रहे हैं, आपकी उद्धृत सीमांकित सूची के प्रत्येक तत्व।

 WHERE 'A' IN ( q'['A', 'B']' )

'A' . के बाद से कभी भी मेल नहीं खाएगा q'['A', 'B']' . के बराबर नहीं है (या '''A'', ''B''' ) और गिनती हमेशा शून्य रहेगी।

 WHERE 'A' IN ( 'A', 'B' )

मेल खाएगा लेकिन IN . की अभिव्यक्ति सूची में दो शब्द हैं हालत।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या ODP.NET पुनर्वितरण योग्य है?

  2. ओरेकल बाधा डेटाटाइप

  3. अनुक्रम मौजूद नहीं है ORA-02289

  4. ओरेकल में डिकोड पोस्टग्रेज में कनवर्ट करें

  5. तत्काल तत्काल का उपयोग करते हुए डायनामिक एसक्यूएल सिंटैक्स