-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplsql.sql
154 lines (102 loc) · 3.84 KB
/
plsql.sql
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
-- SET SERVEROUTPUT ON FORMAT WRAPPED SIZE 10000;-
-- SET VERIFY OFF; -- Se verifica el tipo para no tener problemas de verificación.
/*
-- EN PL Accedemos a tablas y nombres bien puestos...
-- Las variables de mi código van con x_, v_ para no coincidir con un campo de la BBDD.
-- para distinguir las variables de campos de la base de datos a las que estoy accediendo.
DECLARE
x_entero INT := 5;
-- v_dni VARCHAR(20) := '&dni'; -- Provoca el uso del developer te pida un valor....
BEGIN
dbms_output.put_line('Hello world!: ' || x_entero);
-- dbms_output.put_line('Hola: ' || v_dni);
--select count(*) from clientes; -- an INTO CLAUSE, no se puede hacer una select a pelo en PL/SQL
-- Si puedo hacer insert update o delete por que no espero respuesta.
-- de la base de datos.
select count(*) into x_entero from productos where UDS_EXISTENCIA < 3;
dbms_output.put_line('Hay: ' || x_entero || ' clientes');
select UDS_EXISTENCIA into x_entero from productos where UDS_EXISTENCIA < 3;
dbms_output.put_line('Hay: ' || x_entero || ' existencias!');
-- select UDS_EXISTENCIA into x_entero from productos where UDS_EXISTENCIA < 6;
-- dbms_output.put_line('Hay: ' || x_entero || ' existencias!');
select UDS_EXISTENCIA into x_entero from productos where UDS_EXISTENCIA < 0;
dbms_output.put_line('Hay: ' || x_entero || ' existencias!');
EXCEPTION
when TOO_MANY_ROWS then
dbms_output.put_line('Demasiadas filas');
when NO_DATA_FOUND then
dbms_output.put_line('No data found!');
END;
/
*/
/*
DECLARE
CURSOR cproductos(x_uds INTEGER) IS
select * from productos where UDS_EXISTENCIA < x_uds;
BEGIN
dbms_output.put_line('Productos con menos de 5 unidades...') ;
FOR productos_reg IN cproductos(5) LOOP
dbms_output.put_line('Nombre : ' || productos_reg.NOMBRE || ' unidades: ' || productos_reg.UDS_EXISTENCIA);
END LOOP;
-- No hace falta ni abrir ni cerrar el cursor
dbms_output.put_line('Productos con menos de 25 unidades...');
FOR productos_reg IN cproductos(25) LOOP
dbms_output.put_line('Nombre : ' || productos_reg.NOMBRE || ' unidades: ' || productos_reg.UDS_EXISTENCIA);
END LOOP;
-- No hace falta ni abrir ni cerrar el cursor
END;
/
*/
-- PL/SQL (0)
/*
DECLARE
v_dni clientes.dni%TYPE := '&dni'; -- Provoca el uso del developer te pida un valor....
c_reg clientes%ROWTYPE;
BEGIN
dbms_output.put_line('Hello world!');
select * into c_reg from clientes where dni = v_dni;
dbms_output.put_line('Cliente: ' || c_reg.nombre);
EXCEPTION
when NO_DATA_FOUND then
dbms_output.put_line('No existe el cliente con ese nombre...');
END;
/
*/
CREATE OR REPLACE PROCEDURE NUM_CLIENTES AS
x_num_clientes INT;
BEGIN
select count(*) into x_num_clientes from clientes;
dbms_output.put_line('Numero de clientes: ' || x_num_clientes);
END;
/
CREATE OR REPLACE FUNCTION NUM_CLIENTES_F RETURN INT AS
x_num_clientes INT;
BEGIN
select count(*) into x_num_clientes from clientes;
return x_num_clientes;
END;
/
DECLARE
x_num_clientes INT;
BEGIN
dbms_output.put_line('Numero de clientes: ' || NUM_CLIENTES_F);
NUM_CLIENTES;
select NUM_CLIENTES_F from dual;
END;
/
SHO ERRORS;
select table_name from user_tables;
desc all_tables;
-- Para todos los objetos hay una tabla o una vista del sistema.
-- select owner, count(*) from all_tables group by owner;
select table_name from user_tables;
create table prueba as select * from clientes;
-- Result...
desc prueba;
select * from prueba;
drop table prueba;
-- Obtener las tablas originales
-- Crear las tablas nuevas con las tablas originales SQL dinámico...
-- Borrar los datos de las tablas originales...
select rownum, table_name from user_tables
order by rownum desc;