Pregunta

Quiero dejar caer una columna llamada id que es una PK incremento automático.

El SQL:

alter table "CO88GT"."XGLCTL" drop column id cascade;

Y me sale:

Error: [SQL0952] Processing of the SQL statement ended.  Reason code 10.

SQLState:  57014

ErrorCode: -952

Yo podría estar equivocado, pero creo que tiene algo que ver con la prevención de la tabla de la pérdida de datos. Para solucionar este problema Necesito crear una nueva tabla sin la columna y copiar los datos de la tabla antigua en la nueva tabla y luego reemplazar la tabla de edad con la nueva tabla.

¿Fue útil?

Solución

Información

AS400 le está dando un (mensaje de consulta) de alerta por la posible pérdida de datos, pidiéndole que Cancelar o haga caso de la operación solicitada. Así que, por culpa de que esto sea una solicitud interactiva, por medio de JDBC / ODBC no se puede escribir 'I' de ignorar, y como se lanza un código de error: -952 con Sqlstate. 57014 y el código de razón 10

En la documentación de SQL0952 dice:

Message Text:   Processing of the SQL statement ended. Reason code &1.
Cause Text:     The SQL operation was ended before normal completion. The reason code is &1. Reason codes and their meanings are:

* 1 - An SQLCancel API request has been processed, for example from ODBC.
* 2 - SQL processing was ended by sending an exception.
* 3 - Abnormal termination.
* 4 - Activation group termination.
* 5 - Reclaim activation group or reclaim resources.
* 6 - Process termination.
* 7 - An EXIT function was called.
* 8 - Unhandled exception.
* 9 - A Long Jump was processed.
* 10 - A cancel reply to an inquiry message was received.
* 11 - Open Database File Exit Program (QIBM_QDB_OPEN).
* 0 - Unknown cause.

Si está utilizando JDBC y el error SQL no se explica por sí mismo, se puede hacer una conexión JDBC con el parámetro ' = errores completa ', que dará mucha más información sobre el error. Para otros parámetros de conexión ver este .

string ejemplo de conexión:

jdbc: as400: // ServerName; bibliotecas = * LIBL; nombrar = sistema; errores = full ;

Con este respecto, el error resultante sería así:

Error: [SQL0952] Processing of the SQL statement ended.  Reason code 10.
Cause . . . . . :   The SQL operation was ended before normal completion.
The reason code is 10.
Reason codes and their meanings are:
1 -- An SQLCancel API request has been processed, for example from ODBC.
2 -- SQL processing was ended by sending an exception.
3 -- Abnormal termination.
4 -- Activation group termination.
5 -- Reclaim activation group or reclaim resources.
6 -- Process termination.
7 -- An EXIT function was called.
8 -- Unhandled exception.
9 -- A Long Jump was processed.
10 -- A cancel reply to an inquiry message was received.
11 -- Open Database File Exit Program (QIBM_QDB_OPEN).
0 -- Unknown cause.
Recovery  . . . :   If the reason code is 1, a client request was made to cancel SQL processing.  For all other reason codes, see previous messages to determine why SQL processing was ended.

SQLState:  57014
ErrorCode: -952

La solución

Así que, finalmente, si no se puede utilizar STRSQL, otra solución es utilizar iSeries Navigator, para ser exactos sus "Ejecutar scripts SQL" (por lo general es aquí -> "% Archivos de programa% \ IBM \ Access Client \ Shared \ cwbundbs.exe ").

Pero en primer lugar hay que añadir un parámetro de respuestas del sistema ( sólo una vez por la máquina )

ADDRPYLE SEQNBR (1500) MSGID (CPA32B2) RPY ( 'I')

Esto se hace en "pantalla verde". Esto establece un deafult respuesta ( 'I') en mensaje de consulta CPA32B2. El CPA32B2 es un id masaje interno, que está ligado a una operación de la columna de la gota.

(En realidad, no tiene que ser hecho en "pantalla azul", lo utilizan como el comando CHGJOB Ejemplo:.

cl: SEQNBR (1500) MSGID (CPA32B2) RPY ADDRPYLE ( 'I');

)

Ahora puede empezar a "Ejecutar scripts SQL", el primer comando a ejecutar es:

cl: CHGJOB INQMSGRPY (* SYSRPYL);

esto cambia el trabajo actual parámetro INQMSGRPY , a * SYSRPYL. * SYSRPYL hace mirar si existe un parámetro de respuesta del sistema cuando se debe mostrar un mensaje de consulta.

Ahora usted puede ejecutar su alter que cae la columna.


Por desgracia, no sé cómo eliminar una columna, simplemente usando JDBC. Si alguien sabe por favor hágamelo saber.

Referencias:

Otros consejos

Finalmente he encontrado una solución:

CALL QSYS2.QCMDEXC('ADDRPYLE SEQNBR(1500) MSGID(CPA32B2) RPY(''I'')');
CALL QSYS2.QCMDEXC('CHGJOB INQMSGRPY(*SYSRPYL)');


ALTER TABLE <tablename> DROP COLUMN <column_name>;                

No hay suficiente información en su mensaje de error para estar seguro, pero dejando caer una columna de clave principal es en general bastante arriesgado y la base de datos correctamente hace que sea difícil.

Es probable que haya una restricción de clave externa que implica que la columna.

No deje caer la restricción y eliminar esa columna a menos que esté seguro de que sabe lo que está haciendo.

De acuerdo con este post: http://bytes.com/topic / DB2 / respuestas / 185467-drop-tabla de columnas

Es posible dejar caer una columna usando STRSQL en el entorno de pantalla verde. Voy a tener acceso a esta y funciona, pero un cliente con un 400 no tiene el programa de licencia para utilizar STRSQL. La cuestión es que STRSQL le indicará si esto es algo que realmente quiero hacer.

Para obtener los datos que estoy usando SQuirreL cliente de SQL con el controlador JDBC JT400 ... Así que supongo que con el sistema de insistir en que provocó (y en realidad no hay manera de conseguir la pronta incluso sin STRSQL) no va a dejar yo lo haga.

Así que supongo que estoy atascado haciendo lo que estoy haciendo ... creando una nueva tabla y la copia de los datos y luego intercambiando las tablas.

La única manera que he encontrado para conseguir JDBC al trabajo es primero cambiar manualmente el valor predeterminado para este mensaje. A continuación, ejecutar la aplicación de actualización. En nuestro caso utilizamos Liquibase. Que podría conseguir CommandCall del java para llamar ADDRPYLE y CHGJOB INQMSGRPY (* SYSRPYL), pero en realidad nunca permitió alter table * * columna de gotas de no dar el error siguiente:

Error:

10 -- A cancel reply to an inquiry message was received.

Comando de trabajo:

CHGMSGD MSGID(CPA32B2) MSGF(QSYS/QCPFMSG) DFT('I')

Referencia:

pantalla verde - STRSQL le dará msg del error de respuesta

tabla alter devlibsc / trklst columna gota "ST"

Cambio de archivo TRKLST puede causar la pérdida de datos. (C I)

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