sql触发器更新并插入

时间:2017-08-08 00:51:48

标签: sql postgresql-9.3

我的语言'plpgsql'中的sql有问题。

问题是首先在customers表中添加一个新列clean_phone。然后在insert和update上使用trigger将clean_phone填充到random_string()函数。这就是我所做的。

创建新列

alter table customers
add clean_phone varchar(15);

触发

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();

最后,显示表格

select name,clean_phone from customers;

我遇到的问题是在运行所有代码并显示结果后,clean_phone列仍未显示任何内容。那么,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

请首先使用以下方法检查random_string()函数是否存在: -

选择random_string();

如果你得到了结果,那么请告诉我,因为它在我的最后工作正常。

答案 1 :(得分:0)

使用此代码: -

  

创建或替换函数random_string(长度整数)   将文本返回为

     

$$

     

声明字符文本[]:=' {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}&#39 ;;

     

结果文字:='';

     

i integer:= 0;

     

开始

     

如果长度< 0然后

     

提出异常'鉴于长度不能小于0';

     

结束如果;       for in 1..length loop

     

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

     

结束循环;

     

返回结果;

     

端;

     

$$ language plpgsql;

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