trigger e dblink

1

estou trabalhando em um gatilho em PL / TCL que insere dados na tabela B no banco de dados B após a inserção na tabela A do banco de dadosA. ambas as bases de dados estão no mesmo servidor. Eu vim com isto:

CREATE OR REPLACE FUNCTION add_to_erp() RETURNS trigger AS $$  
BEGIN  
IF (TG_OP='INSERT') THEN  
perform dblink_connect('dbname=oerp_test user=postgres password=abouali');  
perform dblink_exec('insert into product_template(standard_price, list_price, name) 
values 
('||NEW.pricebuy||','||NEW.pricesell||','||NEW.name||');');  
perform dblink_exec('insert into product_product(product_tmpl_id) values (currval(''product_template_id_seq''::regclass));');  
perform dblink_disconnect();  
END IF;  
RETURN NEW;  
END; $$  
LANGUAGE 'plpgsql';  
CREATE TRIGGER add_to_erp_trigger AFTER INSERT ON products FOR EACH ROW EXECUTE PROCEDURE 
add_to_erp();  

mas quando eu tento:

INSERT INTO products (id,reference,code,name,pricebuy,pricesell,category,taxcat) VALUES (3,3,3,'apple',12,24,'000','000');

eu recebo:

ERROR: column "apple" does not exist

se eu tentar em vez disso:

INSERT INTO products (id,reference,code,name,pricebuy,pricesell,category,taxcat) VALUES (3,3,3,'34',12,24,'000','000');

seu sucesso

Alguma idéia sobre o motivo?

    
por user74756 16.03.2011 / 22:05

1 resposta

1

Você precisa incluir as cotações no valor da coluna de nome na consulta que está construindo. Você precisará:

perform dblink_exec('insert into product_template(standard_price, list_price, name) 
                     values ('||NEW.pricebuy||','||NEW.pricesell||','''||NEW.name||''');');

Quando '' na string se torna ' , você concatena apple , então o resultado final se torna values (12,24,'apple') em vez de values (12,24,apple)

    
por 16.03.2011 / 22:13

Tags