-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsql.txt
76 lines (56 loc) · 1.74 KB
/
sql.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
4.
DECLARE
v_cod_x TABLA_X.COD%TYPE;
v_valor_x TABLA_X.VALOR_X%TYPE;
v_cod_y TABLA_Y.COD2%TYPE;
v_max_registros NUMBER(10);
BEGIN
SELECT MAX(total_registros)
INTO v_max_registros
FROM (
SELECT COUNT(*) AS total_registros
FROM TABLA_X
UNION ALL
SELECT COUNT(*) AS total_registros
FROM TABLA_Y
);
DBMS_OUTPUT.PUT_LINE('La tabla con mayor registros tiene ' || v_max_registros || ' registros.');
FOR x IN (SELECT COD, VALOR_X FROM TABLA_X)
LOOP
v_cod_x := x.COD;
v_valor_x := x.VALOR_X;
SELECT COUNT(*) INTO v_max_registros FROM TABLA_Y;
IF v_max_registros > 0 THEN
SELECT COD2 INTO v_cod_y FROM TABLA_Y WHERE ROWNUM = 1;
UPDATE TABLA_Y SET VALOR_X = v_valor_x WHERE COD2 = v_cod_y;
END IF;
UPDATE TABLA_X SET VALOR_X = v_valor_x WHERE COD = v_cod_x;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Los valores de la tabla X se han actualizado con los valores de la tabla Y.');
DBMS_OUTPUT.PUT_LINE('Los valores de la tabla Y se han actualizado con los valores de la tabla X.');
END;
3.
DECLARE
valor_x NUMBER(10,0);
TYPE num_tab IS TABLE OF NUMBER;
comunes_tab num_tab := num_tab();
CURSOR cursor_comunes IS
SELECT tabla_x.valor_x
FROM tabla_x
WHERE tabla_x.valor_x IN (
SELECT tabla_y.valor_x
FROM tabla_y
);
BEGIN
OPEN cursor_comunes;
LOOP
FETCH cursor_comunes INTO valor_x;
EXIT WHEN cursor_comunes%NOTFOUND;
IF valor_x NOT MEMBER OF comunes_tab THEN
comunes_tab.extend;
comunes_tab(comunes_tab.count) := valor_x;
DBMS_OUTPUT.PUT_LINE(valor_x);
END IF;
END LOOP;
CLOSE cursor_comunes;
END;