0

Bir kısıtlamalara uyulup uyulmadığını, bir ERROR iletisi göndermek yerine, istekte bulunup bulunmadığını kontrol etmek istiyorum. Bunu nasıl yaparım?SQL Kısıtlama Doğrulama İşlevi

TABLO Örnek I kullanıyorum: Fonksiyonlar

CREATE TABLE tree (
    name VARCHAR(64) UNIQUE PRIMARY KEY, 
    leaf INT CHECK (leaf > 0) 
); 

Örnek I kullanmak:

CREATE FUNCTION add_tree(name, nb_leaf) RETURNS BOOLEAN; 
CREATE FUNCTION remove_leaf(tree_name, leaf_to_remove) RETURNS BOOLEAN; 

benim fonksiyonunda çok tekrarlanan olacağını isim

kontrol etmek için
IF EXISTS (SELECT name FROM tree WHERE name=tree_name) THEN... 

Zaten UNIQUE bir kısıtlamaya sahip olduğumdan, ancak eğer ben kontrol edemediğimde, hata mesajını alıyorum, nasıl yapmalıyım t (IF ..) işaretini kullanın ve hata mesajı almayın, ancak yanlış girdiyse bunun yerine yanlış bir getiri mi?

PS: sen-ecek sayfasının sonunda

EXCEPTION 
    WHEN OTHERS THEN 
    return false; 
END; 

http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html

: O

+0

Oracle'da kullanıcı tanımını oluşturabilirsiniz. özel durumlar. Bunun da postgress olarak mümkün olabileceğine eminim. Hata yürütüldüğünde, false – massie

cevap

0

istisna çekildiği anda, İşlevinizden return false için herşeyi değiştirir eğer postgresql kullanıyorum bir örneğe bakın:

DECLARE 
    text_var1 text; 
    text_var2 text; 
    text_var3 text; 
BEGIN 
    -- some processing which might cause an exception 
    ... 
EXCEPTION WHEN OTHERS THEN 
    GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT, 
          text_var2 = PG_EXCEPTION_DETAIL, 
          text_var3 = PG_EXCEPTION_HINT; 
END; 
+0

döndürebilir, ancak bu sözdizimi bana NEDENLERİNDE (SELECT name FROM tree WHERE name = ağaç_adı) THEN ... işlevini yapmaya zorlayacaktır. (WHEN kullanamazsınız çünkü istisnayı kaldırıyorum "yükseltme" de bir hata alıyorum) – sourpet

+0

Fonksiyonunuzda add_tree yazabilirsiniz bir ekleme (sanırım siz yaparsınız) ve bu benzersiz bir kısıtlama veya başka bir hata nedeniyle başarısız olduğunda EXCEPTION onu yakalar ve yanlış döndür. Oracle'da, DAHA SONRA OLARAK KABUL EDİN. Postgresql de. – massie

+0

Evet! DİĞER çalıştı! – sourpet