tipos salida procedimientos procedimiento parametros funciones ejemplos ejecutar developer con bloques almacenado sql oracle version-control stored-procedures

sql - salida - procedure oracle ejemplos



¿Herramientas para trabajar con procedimientos almacenados en Oracle, en un equipo? (9)

El nuevo SQL Developer de Oracle tiene incorporado el control de versiones.

Aquí hay un enlace al producto.

http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html

http://www.oracle.com/technology/products/database/sql_developer/images/what_version.png http://www.oracle.com/technology/products/database/sql_developer/images/what_version.png

¿Qué herramientas usas para desarrollar procedimientos almacenados de Oracle en un equipo?

  • Para "bloquear" automáticamente el procedimiento actual con el que está trabajando, para que nadie más en el equipo pueda realizar cambios hasta que termine.
  • Para enviar automáticamente los cambios que realiza en el procedimiento almacenado, en una base de datos Oracle, a un repositorio de Subversion, CVS, ...

¡Gracias!


Una solución relativamente simple (aunque un poco pasada de moda) podría ser usar un sistema de control de versiones en "bloqueo" en lugar de "fusionar" ... Subversion o CVS generalmente usan un modo "fusión" (aunque creo que se puede hacer Subversion) para "bloquear" archivos?)

Los sistemas de control de versiones en modo "bloqueo" tienen sus propios inconvenientes, por supuesto .....

La única forma en que se me ocurre hacer en Oracle podría ser algo así como ANTES DE CREAR EL DISPARADOR, tal vez haciendo referencia a una tabla para buscar en quién ejecutar un paquete. ¿Aunque suena un poco desagradable?


Con Oracle SQL Developer 1.5 , puede crear y administrar fácilmente conexiones a CVS o Subversion. Para crear una conexión CVS (por ejemplo), haga clic en Control de versiones -> CVS -> Comprobar módulo . Ejecutará un asistente para crear la conexión (host, nombre de usuario, etc.) y luego podrá verificar sus procedimientos / funciones de forma normal.

La integración con CVS también se proporciona en Toad .


También puede consultar Aqua Data Studio. También han incorporado SVN y es un gran editor de Prod almacenado.


Toad también hace esto sin requerir CVS / SVN.


Trate PL / SQL como código habitual: guárdelo en archivos y administre estos archivos con su herramienta de control de revisiones y sus procedimientos internos.

Si aún no tiene una herramienta de control de revisión, escriba sus requisitos y elija uno . Mucha gente parece usar Subversion , asociado a TortoiseSVN como cliente en Windows (sí).

La cuestión es: utilice su herramienta como se recomienda y adapte sus procedimientos en consecuencia. Por ejemplo, Subversion usa un modelo copiar-modificar-fusionar de forma predeterminada, a diferencia de un modelo bloquear-modificar-desbloquear que parece favorecer.

En mi caso, me gusta usar TortoiseSVN, como se indicó anteriormente. Y como es habitual con esta herramienta:

  • Nunca bloqueo ningún archivo. Esto es muy manejable con equipos pequeños, y requiere una planificación anticipada en los más grandes, lo que siempre es algo bueno en mi humilde opinión.
  • Envío mis cambios manualmente al servidor, porque ... No creo que haya otra manera con Subversion (además, los procedimientos internos prohíben una confirmación sin mensaje, que también es algo bueno en mi humilde opinión).

Y cualquiera que sea su elección, le recomiendo leer esta publicación (y las relacionadas) sobre el control de versiones de la base de datos .


No estoy seguro de si el póster original todavía está monitoreando esto, pero de todos modos haré la pregunta.

La publicación original solicitada para poder:

Para "bloquear" automáticamente el procedimiento actual con el que está trabajando, para que nadie más en el equipo pueda realizar cambios hasta que termine.

Quizás el problema aquí es uno de paradigma de desarrollo más que la incapacidad de un producto para "bloquear" el proceso almacenado. Cada vez que escucho "Quiero bloquear esto para que nadie más lo cambie", inmediatamente tengo la sensación de que las personas comparten un esquema y que todos se están desarrollando en el mismo espacio.

Si este es el caso, ¿por qué no simplemente dejar que cada uno tenga su propio esquema con una copia del modelo de datos? En serio, amigos, no "cuesta" nada crear otro esquema. De esta forma, cada desarrollador puede hacer cambios hasta que estén azules en la cara sin afectar a nadie más.

Otro truco que he usado en el pasado (en equipos pequeños) cuando no era factible permitir a cada desarrollador tener su propia copia de los datos debido al tamaño, era tener un esquema maestro con todas las tablas y el código en él, con sinónimos públicos apuntando a todo. Entonces, si el desarrollador quiere trabajar en un proceso almacenado, simplemente lo crea en su esquema. De esta forma, la resolución de nombres de Oracle encuentra esa primera en lugar de la copia en el esquema maestro, lo que les permite probar su código sin afectar a nadie más. Esto tiene sus inconvenientes, pero este fue un caso muy específico en el que pudimos vivir con ellos. NUNCA NUNCA implementaría algo como esto en producción obviamente.

En cuanto al segundo requisito:

Para enviar automáticamente los cambios que realiza en el procedimiento almacenado, en una base de datos Oracle, a un repositorio de Subversion, CVS, ...

Me sorprendería encontrar herramientas lo suficientemente inteligentes como para hacer esto (tal vez una oportunidad :). Tendría que conectarse a su base de datos, consultar el diccionario de datos (USER_SOURCE) y extraer el texto asociado. Una tarea difícil para los sistemas de control de origen en la que casi todos los archivos se basan.


Después de buscar una herramienta para manejar el control de versiones para objetos Oracle sin suerte, creamos la siguiente solución (no perfecta pero adecuada):

  1. Usando el paquete dbms_metadata creamos el volcado de metadatos de nuestro servidor Oracle. Creamos un archivo por objeto, por lo tanto, el resultado no es un archivo enorme sino un grupo de archivos. Para reconocer el objeto eliminado, eliminamos todos los archivos antes de volver a crear el volcado.
  2. Copiamos todos los archivos del servidor a la computadora del cliente.
  3. Utilizando Netbeans reconocemos los cambios y confirmamos los cambios en el servidor CVS (o verificamos los diffs ...). Cualquier software de CVS-handler funcionaría aquí, pero ya estábamos usando Netbeans para otros fines. Y Netbeans también permite crear una tarea ant para llamar al proceso Oracle mencionado en el paso 1, copiar los archivos mencionados en el paso 2 ...

Aquí está la consulta más importante para el paso 1:

SELECT object_type, object_name, dbms_metadata.get_ddl(object_type, object_name) object_ddl FROM user_objects WHERE OBJECT_TYPE in (''INDEX'', ''TRIGGER'', ''TABLE'', ''VIEW'', ''PACKAGE'', ''FUNCTION'', ''PROCEDURE'', ''SYNONYM'', ''TYPE'') ORDER BY OBJECT_TYPE, OBJECT_NAME

Un archivo por enfoque de objeto ayuda a identificar los cambios. Si agrego un campo a la tabla TTTT (no es un nombre de tabla real por supuesto), entonces solo se TABLE_TTTT.SQL archivo TABLE_TTTT.SQL .

Tanto el paso 1 como el paso 3 son procesos lentos. (varios minutos para algunos miles de archivos)


Usando Source Control for Oracle obtienes mucho de lo que estás buscando.

Los procedimientos almacenados (así como los paquetes, funciones, tablas, etc.) se pueden bloquear manualmente utilizando la interfaz, no automáticamente, pero esto evita que otros realicen cambios.

El nuevo SQL para crear el objeto se puede verificar en SVN o TFS (desafortunadamente no hay soporte para CVS).

La herramienta no es gratuita, pero tiene una versión de prueba gratuita de 28 días.