Reputation: 37
I have two tables (MST_IP and MST_ROUTER) like this below:
MST_IP
SEQ IP_NUMBER STATUS
1 12.123.0.0 0
2 12.123.0.1 0
3 12.104.0.1 0
4 12.104.0.2 0
5 13.123.0.1 0
6 13.123.0.2 0
7 11.555.8.1 0
8 11.555.8.2 0
I want to insert IP_NUMBER from MST_IP to MST_ROUTER (IP_NUMBER and REMOTE_NUMBER). What I want the data will be like this below.
MST_ROUTER
USER_ID IP_NUMBER REMOTE_NUMBER
AA 12.123.0.0 12.123.0.1
BB 12.104.0.1 12.104.0.2
CC 13.123.0.1 13.123.0.2
DD 11.555.8.1 11.555.8.2
below is my code.
/* Formatted on 9/28/2017 11:44:11 AM (QP5 v5.115.810.9015) */ SET SERVEROUTPUT ON
DECLARE INS VARCHAR2 (100); INS2 VARCHAR2 (100); SEQ_R INTEGER; BEGIN SEQ_R := 1;
SELECT IP_NUMBER
INTO INS
FROM ( SELECT *
FROM MST_IP
WHERE STATUS = 0
ORDER BY SEQ ASC)
WHERE ROWNUM = 1;
SELECT IP_NUMBER
INTO INS2
FROM ( SELECT *
FROM MST_IP
WHERE STATUS = 0 AND SEQ = SEQ_R + 1
ORDER BY SEQ ASC)
WHERE ROWNUM = 1;
INSERT INTO MST_ROUTER (USER_ID, IP_NUMBER)
VALUES ('HMJ-BKS', INS);
COMMIT;
UPDATE MST_IP
SET STATUS = 1
WHERE IP_NUMBER = INS;
COMMIT;
UPDATE MST_ROUTER
SET REMOTE_NUMBER = INS2
WHERE USER_ID = 'HMJ-BKS';
COMMIT;
UPDATE MST_IP
SET STATUS = 1
WHERE IP_NUMBER = INS2;
COMMIT;
DBMS_OUTPUT.PUT_LINE (INS); END; /
In my code, I change STATUS on MST_IP = 1 if the data already inserted in MST_ROUTER. The problem my code is not working after for insert the second row. Any comment will be appreciate.
Upvotes: 1
Views: 46
Reputation: 521289
One trick to bring the local and remote IP addresses in line with each other is to join a subquery of local addresses to their remote counterparts, and then insert this result into the MST_ROUTER
table.
INSERT INTO MST_ROUTER (USER_ID, IP_NUMBER, REMOTE_NUMBER)
SELECT
CAST(t1.SEQ / 2 AS UNSIGNED) AS SEQ, t1.IP_NUMBER, t2.IP_NUMBER
FROM
(
SELECT SEQ - 1 AS SEQ, IP_NUMBER
FROM MST_IP
WHERE MOD((SEQ - 1), 2) = 0
) t1
LEFT JOIN MST_IP t2
ON t1.SEQ = t2.SEQ - 2
Below is a link to a demo which shows the output of the select component of my query.
Output:
SEQ IP_NUMBER IP_NUMBER
0 12.123.0.0 12.123.0.1
1 12.104.0.1 12.104.0.2
2 13.123.0.1 13.123.0.2
3 11.555.8.1 11.555.8.2
Upvotes: 1