--Creamos la Unidad de Programa
PROCEDURE carga_bloque IS
Ln_num_dpto NUMBER;
Ln_num_plantilla NUMBER;
Lv_where varchar2(200);
BEGIN
--Se crean 2 variables que vienen asignadas de 2 parámetros
Ln_num_dpto:=:PARAMETER.NUM_DPTO;
Ln_num_plantilla:=:PARAMETER.NUM_PLANTILLA;
--Creamos la variable condición
Lv_where:='NUM_DPTO='||Ln_num_dpto||' and NUM_PLANTILLA='||Ln_num_plantilla;
--Creamos un mensaje de la condición
:msg:=lv_where;
go_block('BL_DOCUMENTO_ETAPA');
--Seteamos el default where
Set_Block_Property('BL_DOCUMENTO_ETAPA',DEFAULT_WHERE,Lv_where);
do_key('Execute_Query');
END;
viernes, 21 de febrero de 2014
jueves, 20 de febrero de 2014
Consultas dinámicas en Oracle
--Creación de una tabla copiada de un select
CREATE TABLE TABLA_PRUEBA
AS
SELECT * FROM EMP;
--Consulta dinámica para dar privilegios de manera automática a un usuario
SELECT 'GRANT SELECT INSERT, UPDATE, DELETE ON '|| TABLE_NAME|| ' TO USUARIO;'
FROM USER_TABLES;
--Consulta dinámica para crear un sinónimo público a un usuario determinado
SELECT 'CREATE SYNONYM '|| OBJECT_NAME|| ' FOR USUARIO.'|| OBJECT_NAME|| ';'
FROM ALL_OBJECTS
WHERE OWNER = USER
AND OBJECT_TYPE IN
('TABLE',
'VIEW',
'PROCEDURE',
'PACKAGE',
'TRIGGERS',
'SEQUENCES');
CREATE TABLE TABLA_PRUEBA
AS
SELECT * FROM EMP;
--Consulta dinámica para dar privilegios de manera automática a un usuario
SELECT 'GRANT SELECT INSERT, UPDATE, DELETE ON '|| TABLE_NAME|| ' TO USUARIO;'
FROM USER_TABLES;
--Consulta dinámica para crear un sinónimo público a un usuario determinado
SELECT 'CREATE SYNONYM '|| OBJECT_NAME|| ' FOR USUARIO.'|| OBJECT_NAME|| ';'
FROM ALL_OBJECTS
WHERE OWNER = USER
AND OBJECT_TYPE IN
('TABLE',
'VIEW',
'PROCEDURE',
'PACKAGE',
'TRIGGERS',
'SEQUENCES');
viernes, 14 de febrero de 2014
ORA-00054 RECURSO OCUPADO Y OBTENIDO CON NOWAIT ESPECIFICADO
Matar tablas Oracle con Bloqueo
select
substr(a.os_user_name,1,8) "OS User"
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, p.*
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr
Si intentamos por ejemplo hacer un "drop table" obtendremos un error del tipo ORA-00054: recurso ocupado y obtenido con NOWAIT.
Para desbloquear uno de los objetos usamos alguna de las siguientes sentencias
ALTER SYSTEM DISCONNECT SESSION 'SID, SERIAL' IMMEDIATE;
o bien
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, p.*
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr
Si intentamos por ejemplo hacer un "drop table" obtendremos un error del tipo ORA-00054: recurso ocupado y obtenido con NOWAIT.
Para desbloquear uno de los objetos usamos alguna de las siguientes sentencias
ALTER SYSTEM DISCONNECT SESSION 'SID, SERIAL' IMMEDIATE;
o bien
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
Este blog no
es de autoría personal lo vi por ahí pero me parece de suma importancia porque a
veces ni matando la sesión por medio de TOAD o reiniciando la base de datos
funciona.
El blog es:
http://dieguz2.blogspot.com
Suscribirse a:
Entradas (Atom)