Pregunta

Entonces, tengo 2 instancias de base de datos, una es para desarrollo en general, otra fue copiada del desarrollo para pruebas unitarias.

Algo cambió en la base de datos de desarrollo que no puedo entender y no sé cómo ver qué es diferente.

Cuando intento eliminar de una tabla en particular, por ejemplo:

delete from myschema.mytable where id = 555

Recibo la siguiente respuesta normal de la base de datos de prueba unitaria que indica que no se eliminó ninguna fila:

SQL0100W No se encontró ninguna fila para FETCH, UPDATE o DELETE;o el resultado de una consulta es una tabla vacía.ESTADOSQL=02000

Sin embargo, la base de datos de desarrollo no se elimina en absoluto y aparece el siguiente error:

DB21034E El mandato se procesó como una sentencia SQL porque no era un mandato válido del procesador de línea de mandatos.Durante el procesamiento de SQL devolvió:SQL0440N No se ha encontrado ninguna rutina autorizada denominada "=" de tipo "FUNCTION" que tenga argumentos compatibles.ESTADOSQL=42884

Mi mejor suposición es que se agregó o cambió algún disparador o vista que está causando el problema, pero no tengo idea de cómo encontrar el problema...¿Alguien ha tenido este problema o sabe cómo averiguar cuál es la raíz del problema?

(tenga en cuenta que esta es una base de datos DB2)

¿Fue útil?

Solución

Mmm, aplicando el gran oráculo a esta pregunta, se me ocurrió:

http://bytes.com/forum/thread830774.html

Parece sugerir que otra tabla tiene una clave externa que apunta a la problemática, cuando se elimina ese FK en la otra tabla, la eliminación debería funcionar nuevamente.(Presumiblemente también puedes volver a crear la clave externa)

¿Eso ayuda en algo?

Otros consejos

Es posible que tenga una transacción abierta en la base de datos de desarrollo... eso a veces me lleva a SQL Server

¿El tipo de identificación es compatible con 555?¿O se ha cambiado a un tipo no entero?

Alternativamente, ¿el argumento 555 de alguna manera desaparece (p. ej.¿Si está utilizando JDBC y la declaración preparada no estableció sus argumentos antes de ejecutar la consulta)?

¿Puedes agregar más a tu pregunta?Ese error parece que el analizador de declaraciones SQL está muy confundido acerca de su declaración.¿Puedes hacer una selección en esa tabla para la fila donde id = 555?

Podrías intentar ejecutar RUNSTATS y REORG TABLE en esa tabla, se supone que sirven para ordenar tablas inestables.

@Desechar

Una selección con la misma condición "dónde" funciona bien, pero no se elimina.Ni runstats ni la tabla de reorganización tienen ningún efecto sobre el problema.

@Desechar

De hecho, acabamos de resolver el problema y, de hecho, es exactamente lo que dijiste (un compañero de trabajo también encontró exactamente la misma página).

La solución fue eliminar las restricciones de clave externa y volver a agregarlas.

Otro post sobre el tema:

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=208277&tstart=-1

Lo que indica que el problema es una corrupción de restricción referencial, y en realidad, o supuestamente de todos modos, se solucionó en una versión posterior de db2 V9 (que aún no estamos usando).

¡Gracias por la ayuda!

Por favor verifique 1.sus argumentos de desencadenantes, procedimientos, funciones, etc.2.tipo de datos de argumentos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top