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