2010-10-27 32 views
31
yılında INSERT veya UPDATE etkilenen kayıt sayısını alın

PostgreSQL 9/8 My veritabanı sürücüsü etkilenen kayıtlarının sayısının döndürmez.PostgreSQL

PostgreSQL iyi çözüm gibi görünüyor standart dışı sözdizimi "RETURNING" sunar. Ama sözdizimi ne olabilir? Örnek, bir kaydın kimliğini döndürür, ancak bir sayıma ihtiyacım var. dağıtıcılar (DNAME, mi) değerlerine

INSERT (DEĞER, 'ABC Radyo') mi geri gönderilmesi;

+1

bunu yararlı gelmiyor biliyorum ama çözüm OMG midilli sadece PL eserler gönderdiniz mevcut olanlar için daha iyi sürücü veya güncelleştirme (bulmalıyız/pgSQL kodu). –

+0

MySQL, güncellemeler için etkilenen satırlarla eşleşen satırları otomatik olarak çıktılar, psql sürücüsünün aynı şeyi yapamayacağına üzülürler. – EoghanM

+0

.. Bu çalıştı ama 'distribütörler (yaptım dname) VALUES INSERT INTO kalmaz (VARSAYILAN, 'XYZ Widget'lar') 1 İADESİ;' çalışır? – Jus12

cevap

46

bu soru oooolllllld ve benim çözüm belki aşırı karmaşık olduğunu biliyorum, ama bu çözümün en sevdiğim tür!

Neyse, aynı şeyi yapmak zorunda kaldı ve böyle çalışma var: Gerçekten fıkra İLE PostgreSQL en bir aşk sone yazmak için çevresinde almak zorunda bugünlerde

-- Get count from INSERT 
WITH rows AS (
    INSERT INTO distributors 
     (did, dname) 
    VALUES 
     (DEFAULT, 'XYZ Widgets'), 
     (DEFAULT, 'ABC Widgets') 
    RETURNING 1 
) 
SELECT count(*) FROM rows; 

-- Get count from UPDATE 
WITH rows AS (
    UPDATE distributors 
    SET dname = 'JKL Widgets' 
    WHERE did <= 10 
    RETURNING 1 
) 
SELECT count(*) FROM rows; 

biri ...

Eğer deyimi aradığınız nasıl
+8

Bize o aşkın son halini güncel tutun :) –

0

Bu sorunuza gelen net değil. JDBC gibi bir şey kullandığınızı varsayarak, bir güncelleme yerine bir sorgu olarak çağırabilirsiniz. JDBC en executeQuery Gönderen:

tek Resultset nesnesi döndüren verilen SQL deyimi, çalıştırır.

böyle SELECT veya INSERT ... RETURNING gibi bazı sorgu sonuçlarını döndüren bir deyimini yürütmek, bu nedenle uygun olacaktır. Eğer veritabanına bir güncelleme yapma ve daha sonra etkilendi kaç tuples bilmek istiyorum iseniz, döner executeUpdate kullanmak gerekir:

ya (1) satır SQL Veri İşleme Dili saymak (DML) ifadeleri ya da hiç dönmek SQL deyimleri için (2) 0