我使用insert语句将数据从oracle表单插入数据库,但它插入2行而不是一行

时间:2016-09-18 12:28:54

标签: database oracle plsql oracle11g oracleforms

我正在使用insert语句将数据从oracle表单插入到数据库中,而不是一行行..它会自动插入两个行。?< / p>

我使用以下查询:

insert into xx_book_grp3 ( BOOK_ID,AUTHOR_ID,ISBN,PAGES,PUBLISHING_DATE,BOOK_TYPE,COST,BOOK_NAME) values (xxtrn_grp3_book_id.nextval,:XX_BOOK_GRP3.AUTHOR_ID,:XX_BOOK_GRP3.ISBN,:XX_BOOK_GRP3.PAGES,:XX_BOOK_GRP3.PUBLISHING_DATE,
:XX_BOOK_GRP3.BOOK_TYPE,      
:XX_BOOK_GRP3.COST,           
:XX_BOOK_GRP3.BOOK_NAME);
commit;

2 个答案:

答案 0 :(得分:0)

尝试此操作以防止重复插入: - 我认为你可以检查author_id上的现有记录,只有isbn甚至isbn就足够了:

Declare
v_count number;
Begin
Select count(*) into v_count from xx_book_grp3
  where author_id = :xx_book_grp3.author_id and isbn = :xx_book_grp3.isbn;
if v_count = 0 then
insert into xx_book_grp3 ( BOOK_ID,AUTHOR_ID,ISBN,PAGES,PUBLISHING_DATE,BOOK_TYPE,COST,BOOK_NAME) values (xxtrn_grp3_book_id.nextval,:XX_BOOK_GRP3.AUTHOR_ID,:XX_BOOK_GRP3.ISBN,:XX_BOOK_GRP3.PAGES,:XX_BOOK_GRP3.PUBLISHING_DATE,
:XX_BOOK_GRP3.BOOK_TYPE,      
:XX_BOOK_GRP3.COST,           
:XX_BOOK_GRP3.BOOK_NAME);
commit;
end if;
end;

答案 1 :(得分:0)

首先,确保您的表中有一个主键。请注意:PK可以消除重复。

我还建议检查您的表单是否有同一个表的插入。 您可能拥有数据库触发器或数据库过程,该过程在任何表单触发器中按名称调用。