Inserting rows in to table A where condition with table B
Table A (id_A, value_A) | Table B (id_B, value_B) |
|
|
---|
We want insert a default record into B
B(id_#; "unknow")
for all exist id_# in A to B
Just like:
B(id3; "unknow")
B(id4; "unknow")
because id3 and id4 not in B
pseudo SQL
INSERT INTO table B VALUES (A.id_#, "unknow") WHERE A.id_# NOT IN table B
SYBASE:
using procedure
PRINT 'Create procedure insert_proc ...' GO CREATE PROC insert_proc AS DECLARE @in_trans tinyint, @id_A INT SELECT @in_trans = 0, @id_A = 0 BEGIN TRANSACTION migrate IF @@error <> 0 BEGIN GOTO error END ELSE SELECT @in_trans = 1 DECLARE cur_table_B CURSOR FOR SELECT id_A FROM A WHERE id_A NOT IN (SELECT id_B FROM B) OPEN cur_table_B IF @@error <> 0 OR @@sqlstatus = 1 BEGIN GOTO error END FETCH cur_table_B INTO @id_A IF @@error <> 0 OR @@sqlstatus = 1 BEGIN GOTO error END WHILE @@sqlstatus = 0 BEGIN INSERT INTO B ( id_B, value_B) VALUES ( @id_A, "unknow") FETCH cur_table_B INTO @id_A IF @@error <> 0 OR @@sqlstatus = 1 BEGIN GOTO error END END COMMIT TRANSACTION migrate RETURN 0 error: IF @in_trans = 1 ROLLBACK TRANSACTION migrate RETURN -1 GO /*******************************************************************/ /* Main */ /*******************************************************************/ DECLARE @retcode INT /* Initialize */ SELECT @retcode=0 EXEC @retcode = insert_proc IF @@error <> 0 OR @retcode <> 0 BEGIN GOTO error END PRINT 'SUCCESSFULLY COMPLETED' error: PRINT '' GO /*********************************************************************/ /* Drop stored procedures used in migration */ /*********************************************************************/ PRINT 'Dropping proc insert_proc...' GO IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'insert_proc') DROP PROC insert_proc GO exit
ORACLE:
using procedure
set def on set feedback off set serveroutput on set linesize 180 EXEC DBMS_OUTPUT.PUT_LINE('Insert records ...') DECLARE BEGIN DECLARE CURSOR A_proc IS SELECT id_A FROM A WHERE id_A NOT IN (SELECT id_B FROM B) FOR UPDATE; BEGIN FOR A_rec IN A_proc LOOP INSERT INTO B ( id_B, value_B) VALUES ( A_rec.id_A, "unknow"); END LOOP; END; EXCEPTION WHEN OTHERS THEN NULL; END; / exit
Loading