2017-08-08 1 views
0

Ich habe ein Problem mit SQL in der Sprache 'plpgsql'.SQL-Trigger-Update und Einfügen

Die Frage ist, zuerst eine neue Spalte clean_phone in Kunden Tabelle hinzufügen. Verwenden Sie dann Trigger beim Einfügen und aktualisieren Sie, um die Funktion "clean_phone to random_string()" zu füllen. Hier ist was ich getan habe.

erstellen Sie eine neue Spalte

alter table customers 
add clean_phone varchar(15); 

Trigger

create or replace function clean_function() 
returns trigger as 
$$ 
begin 
new.clean_phone = random_string(); 
return new; 
end; 
$$ 
language 'plpgsql'; 

drop trigger clean_phone on customers; 
create trigger clean_phone 
before update or insert 
on customers 
for each row 
execute procedure clean_function(); 

Und final zeigen die Tabelle

select name,clean_phone from customers; 

Das Problem, das ich habe, ist, nachdem ich den ganzen Code ausführen und das Ergebnis zeigen In der Spalte clean_phone wird immer noch nichts angezeigt. Also, wie könnte ich das beheben?

+0

Sind Sie Einfügen oder irgendetwas in der Tabelle zu aktualisieren? Der Auslöser wird nur unter diesen Umständen aufgerufen. –

+0

Ich versuche, alles einzufügen/zu aktualisieren, aber es zeigt Fehler, dass clean_phone nicht existiert – youlingjun0505

+0

ERROR: Wert zu lang für Typ Zeichen variiert (15) SQL-Status: 22001 Kontext: PL/pgSQL Funktion clean_function() Zeile 3 bei Zuweisung – youlingjun0505

Antwort

0

Bitte prüfen Sie zuerst, dass random_string() Funktion vorhanden sind oder nicht unter Verwendung von: -

wählen random_string();

Wenn Sie das Ergebnis erhalten, lassen Sie es mich wissen, denn es funktioniert gut an meinem Ende. Dieser Kodex

0

Verwendung: -

Create or replace function random_string(length integer) returns text as

$$

declare chars text[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';

result text := '';

i integer := 0;

begin

if length < 0 then

raise exception 'Given length cannot be less than 0';

end if; for i in 1..length loop

result := result || chars[1+random()*(array_length(chars, 1)-1)];

end loop;

return result;

end;

$$ language plpgsql;

create or replace function clean_function() 
returns trigger as 
$$ 
    begin 
     new.clean_phone = random_string(15); 
     return new; 
    end; 
$$ 
language 'plpgsql';