
Casa en Chatou - Maurice Vlaminck
Dentro de la shared pool, cada sentencia SQL es parseada y almacenada en lo que se conoce como “area de contexto” o “cursor”. Cada cursor contiene la siguiente informacion:
- la sentencia parseada
- el plan de ejecucion
- una lista de objetos referenciados
Si dos usuarios ejecutan la misma sentencia SQL, entonces utilizaran el mismo cursor. La sentencia sera reparseada si la representacion en la shared pool esta invalidada. Las representaciones se invalidan cuando, por ejemplo, se ejecuta una sentencia DDL (por ejemplo “ALTER TABLE”) sobre alguno de los objetos de la sentencia del cursor.
4 comentarios
RSS de los Comentarios Identificador URI de TrackBack





una duda que tengo es que tengo un procedimiento almacenado que devuelve un cursor y por mas que le haga un for llamando al procedimiento me lo parsea siempre. El mismo es abierno del forma
open cursor for
select *
from tabla
y luego busco en el v$sqlarea y para esta consulta el parse_calls = executions , me ayudaria mucho saber porque la parsea si esta en un proc almacenado
Hola Esteban,
Las etapas de procesamiento de una sentencia SQL son las mismas independientemente de si la sentencia esta en un procedimiento almacenado o fuera de el.
Espero haber respondido a tu duda.
Un saludo,
Fernando.
gracias por responder , pero a lo que me refiero es que el cursor de parsea lo mismo o sea no se comparte , pero si lo abro de la forma cursor is (select c1 from tabla) y esta dentro de un for me lo parsea una vez y lo ejecuta muchas , esto viendo las columnas executions y parse_calls de la vista v$sqlarea. No se porque cuando hago lo mismo pero con un cursor por referencia me lo parsea siempre.
Hola Fer soy nuevo en Oracle y quisiera saber que es o como se define el Parseo o sentencia Parseada
Es como una sentencia que es almacenada y la detecta o reutiliza en el shared pool?
Gracias