Estoy escribiendo una aplicación para mover datos de Oracle Sybase y la necesidad de realizar una actualización /operaciones de inserción. En Oracle, yo uso la COMBINACIÓN de A, pero no parece estar disponible en Sybase (no en el ASE, de todos modos). Sé que esto se puede hacer con varias instrucciones, pero para un par de razones, realmente estoy tratando de conseguir esto en una sola declaración.

Alguna sugerencia?

OriginalEl autor Ickster | 2010-12-21

5 Comentarios

  1. 5

    por desgracia, es imposible insertar y actualizar una tabla en una declaración sin usar la COMBINACIÓN. que por cierto no existe en SQL de SQL:2008, de acuerdo a este artículo de todos modos, y con el apoyo de prácticamente todas las principales bases de datos, excepto Sybase ASE y PostgreSQL.

    OriginalEl autor vsi

  2. 5

    Sybase, DB2 y son muy IEC/ISO/ANSI SQL Standrd-compatible. MS un poco menos.

    Oracle no es muy conforme al Estándar en todos (a pesar de lo que la glossies decir). Más importante, debido a las limitaciones, el método que utilizan para superarlas es introducir Extensiones a SQL (que no son necesarios para los otros DBMS, que no tienen las limitaciones). Buena manera de asegurarse de que los clientes no tienen que emigrar.

    Así que el mejor consejo para ti es aprender el Estándar SQL manera de hacer lo que estaban haciendo en el lado de Oracle. Y en segundo lugar (no) aprender acerca de Sybases o DB2s (o lo que sea) Extensiones.

    La»FUSIÓN» y «UPSERT» no existe en SQL, que existen en Oracle sólo. La línea de fondo es, usted tiene que ACTUALIZAR e INSERTAR en dos operaciones separadas.

    En SQL INSERT y UPDATE se aplican a una sola tabla, usted puede tener bastante complejo DE cláusulas.

    Para «COMBINAR», que es simplemente una:

    INSERT target ( column_list ) -- we do have defaults
    SELECT ( column_list )
        FROM source
        WHERE primary_key NOT IN ( SELECT primary_key FROM target )

    Actualización es simplemente el complemento:

    UPDATE target SET ( target_column = source_column, ... )
        FROM source
        WHERE primary_key IN ( SELECT primary_key FROM target )

    En la ACTUALIZACIÓN es fácil combinar el DONDE las condiciones y eliminar la Subconsulta (voy a mostrar a usted para la explicación).

    Como yo lo entiendo, Oracle es abyssmal en la ejecución de las Subconsultas (Estándar SQL). Es por eso que todos estos no-Estándar «CORRESPONDENCIA», etc., la finalidad es evitar el Estándar de la Subconsulta sintaxis, que todos los otros DBMS realiza con facilidad.

    Gracias, pero como he indicado en la pregunta, soy consciente de cómo hacer esto con los individuos de las instrucciones Insert y Update. También estoy consciente de ANSI SQL. Yo estaba en general en busca de sugerencias sobre los métodos o las extensiones de que yo no era consciente para realizar el proceso en un solo paso. Yo no soy un gran fan de Oracle, pero he encontrado que la COMBINACIÓN de la instrucción a ser un simple y elegante de la herramienta en varias situaciones.
    Ok, pero la pregunta para el «estado de cuenta». Me han proporcionado el único «método». Funciona para el conjunto de la transformación (varias filas). El único otro «método» es escribirlo como un procedimiento almacenado, pero que se degrada a la fila de procesamiento (muy lento).

    OriginalEl autor PerformanceDBA

  3. 0

    Puede ser que usted podría tratar de fingir con INSERTAR EN y/o ACTUALIZACIÓN con algunos sub-consultas, pero no será tan conveniente como Oracle.

    Que quiero hacer en este código o almacén de datos ? porque también se puede encapsular todo el SQL en un procedimiento almacenado si desea ocultar la complejidad de las consultas.

    OriginalEl autor Stef

  4. 0

    Tal vez podría funcionar. Probado en ASA9.

    insert into my_table (columns) on existing update values (values);

    OriginalEl autor Fabrício Benvenutti

Dejar respuesta

Please enter your comment!
Please enter your name here