2016-03-23 12 views
-2

Bir tablo, A diyelim, A güncelleştirilir, A satırları sayısını sayar ve başka bir tablo B'de bir değer güncelleştirir bir tetikleyici yapmak istiyorum nasıl bu yapılabilir?PGSQL: Başka bir tablonun satırlarının tetikleyici sayacı

+0

Şimdiye kadar denediğin şey çabalarını gösteriyor mu? –

+0

Veritabanları oluşturma konusunda çok yeni olan pgsql için çok yeni, postgresql.org belgelerini izleyerek bir tetikleyici oluşturmaya çalışıyorum ama bir prosedürün nasıl oluşturulacağını çok açıklamıyorum. Ben takip ediyordu örnek oldu –

cevap

0

tamamını buradan numune vardır: http://www.postgresql.org/docs/9.3/static/plpgsql-trigger.html

sağlamanız gerekiyor saklı yordam oluşturmak için: İŞLEVİ your_function_name (parameters_goes_here) CREATE returned_data_type_or_trigger_for_triggers OLARAK string_value_with_body DÖNDÜ;

Normalde noktalı virgül biter komutu, böylece gövdeyi yazamazsınız. Diğer veritabanları komut sınırlayıcıyı değiştirir. PG özel string sınırlayıcı dolar işaretleri sağlar. Lütfen bu konuyla ilgili daha fazla bilgi edinin: What are '$$' used for in PL/pgSQL

Sayaçlara geri dönmek - onlar çok zordur. Konuları konularda saydığınızı varsayalım. Ve iki konu arasındaki mesajları taşıyor. Sayaçları olduğundan, konular güncellenir. Bu da güncelleme kilidi anlamına geliyor. İki konu arasında taşınan iki eşzamanlı mesaj varsa ne olur? İlk hamle temel konusunu kilitler ve diğerini dener. Aynı şey diğerine de olur. : D Onunla başa çıkmak için her ikisinin de aynı olanla çalıştığından emin olmalısınız. Örneğin konuları ID ile sıralayın ve bunlardan ilkini seçin.

+0

, ben bu kodu CREATE OR REPLACE FUNCTION contar_formar() GETİRİLERİ $ GÜNCELLEME equipos SET numeromiembros BEGIN $ VÜCUT OLARAK tetiklemek yapılan = (count (*) SEÇ GELEN formar) WHERE idequipo = (SELECT equipo formar); END; $ BODY $ LANGUAGE plpgsql VOLATILE COST 100; ALTER FONKSİYONU contar_formar() Posta gönderimi SAHİBİ; ama formar bir şey eklemeye çalıştığınızda onun çalışmıyor, bu Bir hata oluştu diyor ki: HATA: Kontrol DÖNÜŞ BAĞLAMINDA olmadan tetik prosedürü sonuna gelmiş: PL/pgSQL fonksiyon contar_formar() –

+0

çözüldü, Bitmeden önce RETURN NULL eklemek zorunda kaldım, yardımın için teşekkür ederim! –

İlgili konular