postgresql+;dblink+;插入并返回
我需要在远程数据库中插入一条记录并插入id。我做错了什么postgresql+;dblink+;插入并返回,postgresql,insert,dblink,Postgresql,Insert,Dblink,我需要在远程数据库中插入一条记录并插入id。我做错了什么 DECLARE ticketvar mytable%rowtype; SqlCommand TEXT; BEGIN ticketvar.c1 := somevalue; ticketvar.c2 := somevalue; SqlCommand := 'INSERT INTO mytable ( c1, c2) VALUES (||ticketvar.c1||, ||ticketvar.c2||) returning
DECLARE
ticketvar mytable%rowtype;
SqlCommand TEXT;
BEGIN
ticketvar.c1 := somevalue;
ticketvar.c2 := somevalue;
SqlCommand := 'INSERT INTO mytable ( c1, c2) VALUES (||ticketvar.c1||, ||ticketvar.c2||) returning tid';
tid = (select * from dblink('mydatawrapper',SqlCommand) AS t1(bigint tid) );
这引起了一个错误`
错误:表“ticketvar”的子句条目中缺少`
使用select语句,一切正常:
result = (select * from dblink('mydatawrapper','SELECT tid FROM mytable WHERE c1='||c1||'') AS t1(bigint tid) );
您需要连接,基于此,您可以使用returning
执行插入,就像使用sqlCommand
一样
回答这个问题。在我看来,您正在使用plSQL—简单的SQL就足够了 使用外部数据包装器+dblink对我有效的示例:
-- if text field has apostrophes:
value2 = replace(value2,'''','''''');
q1 = 'INSERT INTO foreign_table1( field1,field2,field3)
VALUES ('||value1||','''||value2||''', now()) RETURNING id';
SELECT * FROM dblink('foreign_server', q1)
AS foreign_rec(id INTEGER) INTO foreign_table1_id;
连接是通过外部数据包装器“mydatawrapper”建立的是。。。我已经开始回答不带格式的问题,也许这就是为什么我有点错过了。前一段时间我不得不做dblink,而那个页面对我很有帮助,所以我回答说:)您是否尝试过“在mytable(c1,c2)中插入值(“| | ticketvar.c1 | | |”,“| | ticketvar.c2 | |”)返回tid?当然,如果c1和c2是整数,则返回tid。如果它们是字符串,则应在适当的位置添加“”。例如,“,”代替了“,”和“”,在这里你制动了字符串。是的,它确实起作用了,忘了结束这个问题。无论如何,谢谢你的帮助!