Administración y Optimización de Bases de Datos Oracle
Copyright 1999-2004
Manuel de la Herrán Gascón
Scripts en SQL
Creación de un usuario y un tablespace con un datafile |
--Script de creción de prueba0001
--sta c:\orant\database\prueba0001\crear_prueba0001.sql
connect system/manager
create user prueba0001 identified by prueba0001;
grant connect, resource to prueba0001;
CREATE TABLESPACE TS_prueba0001
DATAFILE 'c:\orant\database\prueba0001\prueba0001.dat' SIZE 1M
DEFAULT STORAGE (
INITIAL 10K
NEXT 50K
MINEXTENTS 1
MAXEXTENTS 999
PCTINCREASE 0);
alter user prueba0001
default tablespace TS_prueba0001
temporary tablespace TS_prueba0001;
connect prueba0001/prueba0001
create table numeros(numero number, texto varchar2(100));
drop table numeros;
connect system/manager
DROP TABLESPACE TS_prueba0001 INCLUDING CONTENTS CASCADE CONSTRAINTS;
drop user prueba0001 cascade;
|
Genera y ejecuta un script que une todos los huecos libres |
--START C:\ORANT\DATABASE\SCRIPTS\GENERA_UNEHUECOS.SQL
--SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
--ALTER TABLESPACE TSUS1 COALESCE;
--SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
--SELECT ' DDDD ' || TABLESPACE_NAME || ' DFSDFDS' FROM DBA_TABLESPACES;
SET SQLPROMPT --SQL>
SET HEADING OFF
SET FEEDBACK OFF
SPOOL C:\ORANT\DATABASE\SCRIPTS\UNEHUECOS.SQL
SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' COALESCE;' FROM DBA_TABLESPACES;
SPOOL OFF
SET HEADING ON
SET FEEDBACK ON
START C:\ORANT\DATABASE\SCRIPTS\UNEHUECOS.SQL
|
Inserta números en una tabla mediante un procedimiento pl/sql |
--START C:\ORANT\DATABASE\SCRIPTS\GENERANUMEROS.SQL
--DROP TABLE NUMEROS CASCADE CONSTRAINTS;
--CREATE TABLE NUMEROS(CAMPO1 NUMBER);
--Mostrar los números del 1 al parametro
CREATE OR REPLACE PROCEDURE insertarNumeros1Ub (
Ub number
) IS
vCont number;
BEGIN
-- vContamos de 1 a Ub
vCont := 0;
loop
vCont := vCont + 1;
exit when vCont > Ub;
--dbms_output.put_line('Iteración número ' || vCont);
INSERT INTO NUMEROS VALUES(vCont);
end loop;
END;
/
show errors
set serveroutput on size 400000
DELETE FROM NUMEROS;
EXEC insertarNumeros1Ub(500);
SELECT * FROM NUMEROS;
|
Crea una tabla de usuarios a partir de una tabla de números |
--START C:\ORANT\DATABASE\SCRIPTS\GENERAUSUARIOS.SQL
--DROP TABLE USUARIOS CASCADE CONSTRAINTS;
--CREATE TABLE USUARIOS(NOMBRE VARCHAR2(200));
--INSERT INTO USUARIOS VALUES ('US1');
--INSERT INTO USUARIOS VALUES ('US2');
--INSERT INTO USUARIOS VALUES ('US3');
--SELECT CAMPO1 FROM NUMEROS WHERE CAMPO1 <= 300;
--SELECT 'aa' || CAMPO1 || 'bb' FROM NUMEROS WHERE CAMPO1 <= 300;
--aa = INSERT INTO USUARIOS VALUES 'US
--bb = ';
--aa = 'INSERT INTO USUARIOS VALUES ''US'
--bb = ''';'
SET SQLPROMPT --SQL>
SET HEADING OFF
SET FEEDBACK OFF
SPOOL C:\ORANT\DATABASE\SCRIPTS\INSERTAUSUARIOS.SQL
SELECT 'INSERT INTO USUARIOS VALUES (''US' || CAMPO1 || ''');' FROM NUMEROS WHERE CAMPO1 <= 300;
SPOOL OFF
SET HEADING ON
SET FEEDBACK ON
DELETE FROM USUARIOS;
START C:\ORANT\DATABASE\SCRIPTS\INSERTAUSUARIOS.SQL
SELECT * FROM USUARIOS;
|
Crea un usuario por cada registro en una tabla de usuarios |
--START C:\ORANT\DATABASE\SCRIPTS\GENERAOBJETOS.SQL
--DROP USER PEPE CASCADE;
--DROP TABLESPACE TS_PEPE INCLUDING CONTENTS CASCADE CONSTRAINTS;
--CREATE TABLESPACE TS_PEPE DATAFILE 'C:\ORANT\DATABASE\DF_PEPE' SIZE 6 K;
--CREATE USER PEPE IDENTIFIED BY PEPE DEFAULT TABLESPACE TS_PEPE TEMPORARY TABLESPACE TS_PEPE;
--GRANT CONNECT, RESOURCE TO PEPE;
--SELECT NOMBRE FROM USUARIOS;
--SELECT NOMBRE || NOMBRE FROM USUARIOS;
--SELECT NOMBRE || NOMBRE || NOMBRE || NOMBRE FROM USUARIOS;
--SELECT NOMBRE FROM USUARIOS;
--SELECT 'A' || NOMBRE || 'B' || NOMBRE || 'C' FROM USUARIOS;
--SELECT 'A' || NOMBRE || 'B' || NOMBRE || 'C' || NOMBRE || 'D' || 'E' || NOMBRE || 'F' FROM USUARIOS;
--SELECT 'A' || NOMBRE || 'B' FROM USUARIOS;
SET SQLPROMPT --SQL>
SET HEADING OFF
SET FEEDBACK OFF
SPOOL C:\ORANT\DATABASE\SCRIPTS\CREAOBJETOS.SQL
SELECT 'CREATE TABLESPACE TS_' || NOMBRE || ' DATAFILE ''C:\ORANT\DATABASE\DF_' || NOMBRE || ''' SIZE 6 K;' FROM USUARIOS;
SELECT 'CREATE USER ' || NOMBRE || ' IDENTIFIED BY ' || NOMBRE || ' DEFAULT TABLESPACE TS_' || NOMBRE || ' TEMPORARY TABLESPACE TS_' || NOMBRE || ';' FROM USUARIOS;
SELECT 'GRANT CONNECT, RESOURCE TO ' || NOMBRE || ';' FROM USUARIOS;
GRANT CONNECT, RESOURCE TO PEPE;
SPOOL OFF
SET HEADING ON
SET FEEDBACK ON
START C:\ORANT\DATABASE\SCRIPTS\CREAOBJETOS.SQL
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
|
Crea usuarios mediante for |
set serveroutput on;
begin
for i in 0..25 loop
dbms_output.put_line ('create user us' || i || ' identified by us' || i || ';');
end loop;
end;
/
|
Crea usuarios mediante for |
set serveroutput on;
begin
for i in 0..25 loop
dbms_output.put_line ('create user us' || i || ' identified by us' || i || ';');
end loop;
end;
/
|
Crea usuarios mediante for |
set serveroutput on;
begin
for i in 0..25 loop
dbms_output.put_line ('create user us' || i || ' identified by us' || i || ';');
end loop;
end;
/
|
Ejecución de SQL dinámico |
--Ejecución de SQL dinámico
connect sys/change_on_install
GRANT EXECUTE ON DBMS_SQL TO scott;
connect scott/tiger
set serveroutput on size 400000
declare
csent varchar2(32000);
vcursor number;
nfilas integer;
begin
vcursor := dbms_sql.open_cursor;
--csent := 'select user from dual';
--csent := 'select table_name from user_tables';
--DROP TABLE NUMEROS;
--CREATE TABLE NUMEROS(CAMPO1 NUMBER);
--SELECT * FROM NUMEROS;
csent := 'insert into numeros values(32432)';
dbms_sql.parse(vcursor,csent,dbms_sql.native);
nfilas := dbms_sql.execute(vcursor);
dbms_output.put_line('Han sido tratadas ' || nfilas || ' filas');
dbms_sql.close_cursor(vcursor);
end;
/
show errors
|
Ejecución de SQL dinámico |
--Ejecución de SQL dinámico
set serveroutput on;
CREATE OR REPLACE PROCEDURE executeSql(csent varchar2) IS
vcursor number;
nfilas integer;
BEGIN
vcursor := dbms_sql.open_cursor;
dbms_sql.parse(vcursor,csent,dbms_sql.native);
nfilas := dbms_sql.execute(vcursor);
dbms_output.put_line('Han sido tratadas ' || nfilas || ' filas');
dbms_sql.close_cursor(vcursor);
END;
/
show errors
set serveroutput on;
EXEC executeSql('select user from dual');
EXEC executeSql('select table_name from user_tables');
--select * from dba_role_privs;
--select * from dba_role_privs where grantee = 'SCOTT';
--connect sys/change_on_install
--EXEC executeSql('grant dba to scott');
--select * from dba_role_privs where grantee = 'SCOTT';
|
Ejecución de SQL dinámico |
--Ejecución de SQL dinámico
connect sys/change_on_install
GRANT EXECUTE ON DBMS_SQL TO system;
connect system/manager
set serveroutput on;
CREATE OR REPLACE PROCEDURE executeSql(csent varchar2) IS
vcursor number;
nfilas integer;
BEGIN
vcursor := dbms_sql.open_cursor;
dbms_sql.parse(vcursor,csent,dbms_sql.native);
nfilas := dbms_sql.execute(vcursor);
dbms_output.put_line('Han sido tratadas ' || nfilas || ' filas');
dbms_sql.close_cursor(vcursor);
END;
/
show errors
set serveroutput on;
EXEC executeSql('select user from dual');
begin
for i in 0..25 loop
dbms_output.put_line ('create user us' || i || ' identified by us' || i);
executeSql('select user from dual');
--executeSql('create user us' || i || ' identified by us' || i);
end loop;
end;
/
|
Este curso esta incluido en el CD-ROM de REDcientífica. Solicítalo por correo haciendo click aquí. http://www.redcientifica.com/cdrom/
|