2010-02-12 18 views
19

मैं PostgreSQL में एक डेलेटी क्लॉज से प्रभावित पंक्तियों की संख्या को वापस करने का एक तरीका ढूंढ रहा हूं। documentation बताता है कि;PostgreSQL में हटाई गई पंक्तियों की संख्या कैसे प्राप्त करें?

सफल समापन पर, एक हटाएँ आदेश रूप

हटाएँ गिनती

गिनती पंक्तियों नष्ट कर दिया की संख्या है की एक कमांड टैग देता है। यदि गिनती 0 है, तो कोई पंक्ति नहीं मिली है (यह त्रुटि नहीं माना गया है)।

हटाएँ आदेश एक लौटने खंड शामिल हैं, तो परिणाम एक SELECT कथन वाले कॉलम के समान हो सकता है और लौटने सूची में परिभाषित महत्व देता होगा, पंक्ति (यों) द्वारा हटा अधिक अभिकलन आदेश।

लेकिन मुझे इसका एक अच्छा उदाहरण खोजने में परेशानी हो रही है। क्या कोई मेरी मदद कर सकता है, मैं कैसे पता लगा सकता हूं कि कितनी पंक्तियां हटा दी गईं?


संपादित करें: मैं Milen के समाधान को स्वीकार कर लिया है, लेकिन मैं एक विकल्प है कि मैं बाद में पाया है पेश करने के लिए करना चाहता था। यह here में पाया जा सकता है, 38.5.5 के तहत समझाया गया। परिणाम स्थिति प्राप्त करना शीर्षक।

+0

पसंद? पर्ल, पीएचपी, पायथन, सी, क्लिंगन? – Paul

+0

भाषा जावा है –

+0

बहुत बहुत धन्यवाद। आपका लिंक बहुत उपयोगी था – jny

उत्तर

-1

आपको फ़ंक्शन libpq से फ़ंक्शन की आवश्यकता है। उदाहरण के लिए PHP में pg_affected_rows के रूप में लपेटा गया है।

+0

मैं कल इस पर देख रहा हूं, उत्तर –

4

यह जावा में सरल होना चाहिए।

Statement stmt = connection.createStatement(); 
int rowsAffected = stmt.executeUpdate("delete from your_table"); 
System.out.println("deleted: " + rowsAffected); 

java.sql.Statement देखें।

+1

के लिए धन्यवाद इस प्रश्न के पास जावा के साथ कुछ लेना देना नहीं है .... – Nate

+4

@Nate, ओपी राज्यों के सवाल पर दूसरी टिप्पणी में, "भाषा है जावा।" – cope360

+0

यह स्वीकार्य उत्तर होना चाहिए – Tom

2

पायथन में psycopg2 का उपयोग करके, rowcount विशेषता का उपयोग किया जा सकता है। यहाँ पता लगाने के लिए कई पंक्तियों नष्ट कर दिया गया एक उदाहरण है ...

cur = connection.cursor() 
try: 
    cur.execute("DELETE FROM table WHERE col1 = %s", (value,)) 
    connection.commit() 
    count = cur.rowcount 
    cur.close() 
    print("A total of %s rows were deleted." % count) 
except: 
    connection.rollback() 
    print("An error as occurred, No rows were deleted") 
28

आप RETURNING खंड का उपयोग कर सकते हैं:

DELETE FROM table WHERE condition IS TRUE RETURNING *; 

है कि आप बस पंक्तियों की संख्या लौटे जाँच करने के लिए है के बाद। आप CTE साथ यह कारगर बनाने के कर सकते हैं:

WITH deleted AS (DELETE FROM table WHERE condition IS TRUE RETURNING *) SELECT count(*) FROM deleted; 

यह सिर्फ नष्ट कर दिया पंक्तियों की संख्या लौटना चाहिए।

+1

मुझे लगता है कि इसे स्वीकार किए जाने के रूप में चिह्नित किया जाना चाहिए। – MaNKuR

+1

यह एक विस्तार के बिना काम करता है! निश्चित रूप से स्वीकार्य उत्तर होना चाहिए: डी – Alfabravo

1

डायग्नोस्टिक का उपयोग संशोधित/हटाए गए रिकॉर्ड्स की संख्या प्रदर्शित करने के लिए किया जाता है।

नमूना कोड पटकथा भाषा के लिए

CREATE OR REPLACE FUNCTION fnName() 
    RETURNS void AS 
$BODY$ 
     declare 
     count numeric; 
     begin 
       count := 0; 
      LOOP 
      -- condition here update or delete; 
      GET DIAGNOSTICS count = ROW_COUNT; 
      raise notice 'Value: %', count; 
      end loop; 
     end; 
$BODY$a 
संबंधित मुद्दे

 संबंधित मुद्दे