tag:blogger.com,1999:blog-26801181.post419157643495871152..comments2023-10-18T20:16:44.581+02:00Comments on Programación PL/SQL: Tablas temporales en las bases de datos OracleJLPMhttp://www.blogger.com/profile/00891045835734721638noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-26801181.post-56226234338440459422022-09-15T01:11:13.764+02:002022-09-15T01:11:13.764+02:00Gracias, tenia el mismo problema que no podia edit...Gracias, tenia el mismo problema que no podia editar la tabla. COn tu ayuda pude hacerlo.Luis MRRhttps://www.blogger.com/profile/13812921119492593966noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-58394636038586129672017-05-22T11:34:47.990+02:002017-05-22T11:34:47.990+02:00Me contesto a mi mismo para decir que solucioné el...Me contesto a mi mismo para decir que solucioné el tema.<br />Resulta que la sesión que estaba bloqueando la tabla estaba inactiva, por eso pasaba desapercibida...<br /><br />Paso las sentencias que he usado para encontrar la maldita sesión y matarla : <br /><br />SELECT * FROM v$lock<br /> WHERE id1 = (SELECT object_id FROM all_objects WHERE owner =schema_name AND object_name =glb temp table)<br /><br />SELECT * FROM v$session WHERE sid =above query result<br /><br />ALTER SYSTEM KILL SESSION 'sid,serial#'; <br /><br /><br />Después de esto pude hacer el ALTER TABLE sin problemas.<br /><br />Saludos!!Anonymoushttps://www.blogger.com/profile/11535024768544609228noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-82873900360721753842017-05-22T11:21:10.720+02:002017-05-22T11:21:10.720+02:00Hola José Luis.
Soy lector asiduo de tu blog, muy...Hola José Luis.<br /><br />Soy lector asiduo de tu blog, muy bueno por cierto :)<br /><br />Tengo un problema con una GTT. Necesito hacer un ALTER TABLE para meter 5 campos nuevos, pero el problema es que la GTT fue creada con la sentencia final de "on commit preserve rows", de modo que al hacer el ALTER TABLE, me salta el ORA-14450 (intento de acceso a una tabla temporal de transacciones ya en uso). He comprobado que la tabla no está bloqueada por ninguna sesión, y por lo que he leido por ahí esto salta por haber sido creada con la sentencia "on commit preserve rows", aunque no haya transsacciones en curso...<br /><br /><br />¿Sabes alguna manera de poder añadir esos campos en la tabla sin tener que dropear y volver a crear ..?<br /><br />Pregunta de examen jajaj<br /><br /><br />Un saludete!!Anonymoushttps://www.blogger.com/profile/11535024768544609228noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-54739978077163991722015-12-11T18:06:58.630+01:002015-12-11T18:06:58.630+01:00No se puede crear una tabla temporal como en sql #...No se puede crear una tabla temporal como en sql #nombretabla y solo usar al momento de la ejecución.KhelinMagichttps://www.blogger.com/profile/12920936465406828839noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-5561895468839253252015-08-12T08:56:33.257+02:002015-08-12T08:56:33.257+02:00Hola, poniendo esta instrucción al inicio de la pr...Hola, poniendo esta instrucción al inicio de la procedure (después del IS) no hace falta el execute immediate en un package.<br /> PRAGMA autonomous_transaction;<br />Saludo.Nuriahttps://www.blogger.com/profile/07884546594695052458noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-24232530120145928392011-05-03T15:35:23.231+02:002011-05-03T15:35:23.231+02:00Muchísimas gracias Pepelu!! Me has sido de gran ay...Muchísimas gracias Pepelu!! Me has sido de gran ayuda :)Fabihttps://www.blogger.com/profile/16313022899069860191noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-2739592709677483522011-05-02T21:14:28.190+02:002011-05-02T21:14:28.190+02:00Hola Fabi, el funcionamiento de la tablas temporal...Hola Fabi, el funcionamiento de la tablas temporales en las bases de datos Oracle es como lo explico en este artículo.<br /><br />La definición de la tabla temporal es global y cualquier usuario con los permisos adecuados puede utilizarla. Sin embargo los datos de dichas tablas sólo son visibles a nivel de transacción (ON COMMIT DELETE ROWS) o a nivel de sesión (ON COMMIT PRESERVE ROWS), por lo tanto sólo son visibles para el usuario que creo la sesión en cuestión.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-79726256908529883152011-05-02T19:26:55.798+02:002011-05-02T19:26:55.798+02:00Hola Pepelu! Me gustaría hacerte una pregunta. Est...Hola Pepelu! Me gustaría hacerte una pregunta. Estoy investigando para hacer una presentación en clase (corta, de unos 15 minutos), y he encontrado que en SQL Server existen 2 tipos de tablas temporales: las globales (visibles para cualquier usuario conectado) y las locales (sólo se utilizan en la conexión en la que fueron creadas).<br /><br />¿En Oracle existen estos tipos? <br /><br />El problema es que casi todo lo que encuentro hace referencia a SQL Server, y me gustaría hacer el trabajo genérico.<br /><br />Muchas gracias.<br /><br />Un saludo!!Fabihttps://www.blogger.com/profile/16313022899069860191noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-9005931218026065402011-03-11T12:24:55.232+01:002011-03-11T12:24:55.232+01:00@Jimmy: si no nos enseñas tu código ni nos copias ...@Jimmy: si no nos enseñas tu código ni nos copias el mensaje de error, ¿qué esperas que te digamos?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-26801181.post-83015433472325780812011-03-11T12:18:26.201+01:002011-03-11T12:18:26.201+01:00Jimmy, las tablas temporales se crean como una tab...Jimmy, las tablas temporales se crean como una tabla normal y luego se pueden utilizar dentro de un package de oracle. La estructura de las tablas temporales se crea en la base de datos Oracle, dicha estructura no es temporal sino que se conserva, lo que son temporales son los datos que se almacenan en dicha tabla.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-81704573972604383052011-03-10T22:23:32.165+01:002011-03-10T22:23:32.165+01:00y como creo una tabla temporal dentro de un packag...y como creo una tabla temporal dentro de un package de oracle, pues me sale errorAnonymoushttps://www.blogger.com/profile/09637943172362730733noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-20710864679039415782010-11-05T00:36:45.544+01:002010-11-05T00:36:45.544+01:00He posteado un ejemplo de como insertar dinamicame...He posteado un ejemplo de como insertar dinamicamente en una tabla temporal, por si a alguien le sirve.Developerhttps://www.blogger.com/profile/16239016139522910632noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-44394595422984800792010-11-04T23:38:41.313+01:002010-11-04T23:38:41.313+01:00Muchas gracias por tu respuesta, me sirvió bastant...Muchas gracias por tu respuesta, me sirvió bastante.Developerhttps://www.blogger.com/profile/16239016139522910632noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-8214301423424211462010-11-04T07:07:34.095+01:002010-11-04T07:07:34.095+01:00Hola Jlrvpuma, aunque se use el mismo usuario, cad...Hola Jlrvpuma, aunque se use el mismo usuario, cada conexión a la base de datos Oracle creará dos sesiones independientes por lo que los datos en la tabla temporal también serán independientes, es decir, el usuarios de la primera conexión verá los 10 registros que insertó y no verá los 5 que insertó el de la segunda conexión y viceversa.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-48783786670029625252010-11-04T05:32:51.842+01:002010-11-04T05:32:51.842+01:00Qué pasa si:
-tengo un usuario: user1
user1 se con...Qué pasa si:<br />-tengo un usuario: user1<br />user1 se conecta y ejecuta un stored procedure que inserta 10 registros a la tabla temporal; simultaneamente, antes que termine la sesión o transacción user1(esta es otra persona conectandose desde otra pc, pero usa el mismo usuario) se conecta y ejecuta el mismo stored procedure e inserta 5 registros en la tabla temporal, si el el de la primera conexiòn hace un select le devolverá sólo los 10 registros que insertó o 15 registros? y al segundo que se conectó, como le va?<br />Gracias por el post,muy interesante...espero que me puedas responder...Developerhttps://www.blogger.com/profile/16239016139522910632noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-73421050757710625522010-09-30T07:35:28.874+02:002010-09-30T07:35:28.874+02:00Hola Juan, no entiendo muy bien por qué utilizas e...Hola Juan, no entiendo muy bien por qué utilizas el comando EXECUTE INMEDIATE, tampoco entiendo por qué al final haces un DROP de la tabla temporal, lo bueno de las tablas temporales es que las creas una vez y las dejas en la base de datos Oracle para utilizarlas cuando sea necesario, manteniendo datos temporales y propios de la sesión hasta que esta se cierra.<br /><br />Si quieres puedes contactarme por email en pepelublog[arroba]gmail[punto]comJLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-46641732872859071802010-09-29T17:14:21.786+02:002010-09-29T17:14:21.786+02:00Hola
Sabrias donde puedo encontrar un ejemplo de G...Hola<br />Sabrias donde puedo encontrar un ejemplo de GLOBAL TEMPORARY TABLE en un Store.<br /><br />Todo los que encuentro requieren el uso de EXECUTE IMMEDIATE y no me sirve.<br />El problema del EXECUTE IMMEDIATE no esta en el CREATE, INSERT O DROPE sino el QUERY ya que <br />el EXECUTE IMMEDIATE no se banca devolver mas de un valor.<br /><br />Detallo el problema:<br />me mandan un parametro a un STORE y debo usar ese parametro en un QUERY con la funcion IN.<br /><br />Pense en crear una tabla temporal como en el ejemplo de lo que quiero hacer<br /><br /> EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE temp_t (c1 number) ON COMMIT DELETE ROWS'; <br /> EXECUTE IMMEDIATE 'INSERT INTO temp_t (c1) VALUES (51)';<br /> EXECUTE IMMEDIATE 'INSERT INTO temp_t (c1) VALUES (52)';<br /> EXECUTE IMMEDIATE 'INSERT INTO temp_t (c1) VALUES (53)';<br /> <br /> SELECT COUNT(1) <br /> FROM cliente c<br /> WHERE c.id IN (<b>SELECT tt.id<br /> FROM temp_t</b>);<br /><br /> EXECUTE IMMEDIATE 'DROP TABLE temp_t';<br /><br />agradeceria cualquier ayuda<br />"jbellande gmail com"Juanhttps://www.blogger.com/profile/17021829160510205739noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-70234771918728714512010-04-06T20:21:53.591+02:002010-04-06T20:21:53.591+02:00Se agradece que otros lectores se adelanten y resp...Se agradece que otros lectores se adelanten y respondan a las preguntas antes que yo.<br /><br />Efectivamente KAlvaro tiene razón, la estructura de las tablas temporales se crea una sola vez y lo único realmente temporal son los datos que se insertan en las mismas.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-37810111420958699692010-04-06T18:47:02.742+02:002010-04-06T18:47:02.742+02:00Gracias kAlvaro entonces voy a empezar a utilizar ...Gracias kAlvaro entonces voy a empezar a utilizar para generar algunos reportes que ocupo y que tenia que esperar a que terminara, en sql server si las tenia que crear cada vez que llamaba al procedimiento, muchas gracias.juliushttps://www.blogger.com/profile/00518585126967901605noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-65861849314283082692010-04-06T18:37:50.632+02:002010-04-06T18:37:50.632+02:00@Julius: La tabla temporal es casi igual a una tab...@Julius: La tabla temporal es casi igual a una tabla normal: la creas una sola vez y la utilizas las que necesites. Lo único "temporal" en ella son las filas con datos.<br /><br />Es justo al revés que en SQL Server, donde la tabla desaparece después de usarla y la tienes que crear cada vez.kAlvarohttps://www.blogger.com/profile/04236929274597436375noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-81379989777186037512010-04-06T17:22:47.172+02:002010-04-06T17:22:47.172+02:00Hola que tal interesante eso de las tablas tempora...Hola que tal interesante eso de las tablas temporales pero tengo una duda tengo que crear la tabla temporal cada vez que ejecuto un procedimiento almacenado o la tengo que crear antes de llamar el procedimiento???juliushttps://www.blogger.com/profile/00518585126967901605noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-10218991543426424332009-09-15T19:37:16.054+02:002009-09-15T19:37:16.054+02:00Christian, no se trata de tablas físicas, lo único...Christian, no se trata de tablas físicas, lo único que se almacena es la definición de la tabla pero los datos almacenados son privativos de la sesión y desaparecen al terminar la misma. Lo datos se almacenan en memoria y son más rápidas que las tablas convencionales, no obstante no están enfocadas a manejar volúmenes de datos muy grandes.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-42112014439793481242009-09-15T16:53:36.471+02:002009-09-15T16:53:36.471+02:00Ok en suma son una tablas fisicas que guarda datos...Ok en suma son una tablas fisicas que guarda datos por sesion o nivel de transaccion, se que son otras BD pero por ejemplo en sql server e informix si se usan verdaderas tablas temporales que solo existen mientras dura la sesion que las crea luego se dropean, se crean con "select .... insert into......" son rapidisimas por que estan en memoria, las de oracle son igual de rapidas ?, yo tengo una consulta(select) que demora mucho asi aplique join con indices, no use comodines etc, y quiero pasarla a un SP espero que se se redusca el tiempo de ejecucion.Christian Ruiz Ch.https://www.blogger.com/profile/15687584748910292975noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-4124332972082189802009-05-26T12:44:02.883+02:002009-05-26T12:44:02.883+02:00Entiendo entonces que una tabla temporal se maneja...Entiendo entonces que una tabla temporal se maneja igual que una tabla normal y la única diferencia es que los datos son privados a tu sesión o transacción. No puedes generarla automáticamente a partir de una cláusula SELECT como en otros gestores de bases de datos sino que la defines con el resto de tablas de la aplicación.<br /><br />Está bien, creo que las voy a usar :)kAlvarohttps://www.blogger.com/profile/04236929274597436375noreply@blogger.comtag:blogger.com,1999:blog-26801181.post-27911439197705503412008-04-15T20:45:00.000+02:002008-04-15T20:45:00.000+02:00Ciertamente este artículo se merecía incluir algún...Ciertamente este artículo se merecía incluir algún ejemplo del comando a utilizar para crear una tabla temporal en una base de datos Oracle.<BR/><BR/>Para aquellos que lo habéis pedido, ya tenéis el correspondiente ejemplo.JLPMhttps://www.blogger.com/profile/00891045835734721638noreply@blogger.com