是否有任何函数可以通过某些结果插入带触发组的多行?

问题描述 投票:-2回答:1
CREATE TABLE TABLE_1 (
    ID NUMBER(10),
    ID_DOCUMENT NUMBER(10),
    ITEM_ID NUMBER(10),
    SUPLLIER NUMBER(10)
);
Insert into TABLE_1 (ID, ID_DOCUMENT, ITEM_ID, SUPLLIER) Values (1, 1, 11, 25);

Insert into TABLE_1 (ID, ID_DOCUMENT, ITEM_ID, SUPLLIER) Values (2, 1, 87, 31);

Insert into TABLE_1 (ID, ID_DOCUMENT, ITEM_ID, SUPLLIER) Values (3, 1, 93, 31);

Insert into TABLE_1 (ID, ID_DOCUMENT, ITEM_ID, SUPLLIER) Values (4, 1, 41, 25);

Insert into TABLE_1 (ID, ID_DOCUMENT, ITEM_ID, SUPLLIER) Values (5, 1, 58, 40);

当我插入table_1时,我必须将结果插入另外两个表中:

create table doc
(
    id number(10), 
    suplier number(10),
    date_doc date
); 

create table doc_rows
(
    id number(10),
    id_doc number(10), -- (references doc.id)
    item_id number(10)
);

我想在表doc中创建3个新记录(因为在table_1中我们有3个独特的供应商)并且对于每个新文档我必须将他的项目插入表doc_rows

sql oracle sql-insert
1个回答
0
投票
-- Create tables
CREATE TABLE TABLE_1 (
    ID int  identity (1,1) ,
    ID_DOCUMENT int,
    ITEM_ID int,
    SUPLLIER int
);


create table doc
(
    id int  identity (1,1), 
    suplier int,
    date_doc date
); 

create table doc_rows
(
    id int  identity (1,1),
    id_doc int, -- (references doc.id)
    item_id int
);

--Create triggers

GO

CREATE TRIGGER trgTABLE_1_Insert ON TABLE_1 
FOR INSERT
AS

declare @SUPLLIER int

select @SUPLLIER = SUPLLIER from inserted

if not exists (select 1 from doc where suplier=@SUPLLIER )
Begin
    insert into doc (suplier,date_doc) 
    select @SUPLLIER,GETDATE()  

    insert into doc_rows (id_doc,item_id) 
    SELECT (select id from doc where suplier = @SUPLLIER) id_doc ,
     (SELECT top 1 ITEM_ID from  TABLE_1  where SUPLLIER = @SUPLLIER) item_id 
End

Go
-- insert statement
Insert into TABLE_1 ( ID_DOCUMENT, ITEM_ID, SUPLLIER) Values ( 1, 11, 25);
Insert into TABLE_1 ( ID_DOCUMENT, ITEM_ID, SUPLLIER) Values ( 1, 87, 31);
Insert into TABLE_1 ( ID_DOCUMENT, ITEM_ID, SUPLLIER) Values ( 1, 93, 31);
Insert into TABLE_1 ( ID_DOCUMENT, ITEM_ID, SUPLLIER) Values ( 1, 41, 25);
Insert into TABLE_1 ( ID_DOCUMENT, ITEM_ID, SUPLLIER) Values ( 1, 58, 40);


--fianl output

SELECT * from TABLE_1
SELECT * from doc
SELECT * from doc_rows
© www.soinside.com 2019 - 2024. All rights reserved.