如何复制数据

时间:2015-10-31 01:34:39

标签: sql firebird

我想创建一个从3个表复制数据的存储过程。这些是3个表格的结构:

Quotes
Quote_id integer, note varchar(50)

Quote_id是主键,使用触发器自动递增

Windows
Win_id integer, quote_id integer

Win_id是主键(使用触发器自动递增),这里Quote_id是引用表的FK

Win_links
Links_id integer, win_id integer, linked_win_id integer, edge_name varchar(30)

Links_id是主键(使用触发器自动递增),win_id和linked_win_id都是FK到windows表。

我像这样创建了SP:

create or alter procedure COPY_QUOTE_PROC (
    P_QUOTE_ID integer)
As
declare variable V_LAST_INSERTED_QUOTE_ID integer;
declare variable V_OLD_WIN_ID integer;
begin
  insert into quotes (note) select note from quotes where quotes.quote_id = :P_QUOTE_ID
returning QUOTE_ID into :v_last_inserted_quote_id;

FOR select WIN_ID from windows
  where (windows.quote_id = :p_quote_id)
    into :V_OLD_WIN_ID
  do begin
    insert into windows (quote_id) select :v_last_inserted_quote_id from windows where WIN_ID = :v_old_win_id
end

用于将一个引号中的窗口链接在一起的第三个表例如win_id = 5和linked_win_id = 6另一个记录可以具有相同的窗口但链接到不同的窗口,例如win_id = 5和linked_win_id = 7等等。

现在我如何复制第三个表win_links,使其正确指向新复制的窗口?

0 个答案:

没有答案