Frage

Ich möchte eine Spalte fallen id genannt, die eine automatische Inkrementieren PK ist.

Die SQL:

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

Und ich:

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

SQLState:  57014

ErrorCode: -952

Ich könnte falsch sein, aber ich denke, es hat etwas von dem Verlust von Daten mit Verhinderung der Tabelle zu tun. Um das zu umgehen dieses Problem, das ich brauche eine neue Tabelle, ohne die Spalte zu erstellen und kopieren Sie die Daten aus der alten Tabelle in die neue Tabelle und ersetzt dann die alte Tabelle mit der neuen Tabelle.

War es hilfreich?

Lösung

Info

AS400 gibt Ihnen eine Warnung (Inquiry-Nachricht) wegen möglichen Datenverlustes, in dem Sie auf die angeforderte Operation abbrechen oder zu ignorieren. Also, beacuse dies eine interaktive Anforderung ist, über JDBC / ODBC Sie können nicht geben 'I' zu ignorieren, und AS führt Sie ein Error-Code: -952 mit SQLState:. 57014 und Reason-Code 10

In der Dokumentation von SQL0952 sagt:

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.

Wenn Sie JDBC verwenden und der SQL-Fehler ist nicht selbsterklärend, können Sie eine JDBC-Verbindung mit dem Parameter machen ‚ Fehler = full ‘, die auf den Fehlern viel mehr Informationen geben. Für andere Verbindungsparameter finden Sie unter dieser .

Beispiel-Verbindungszeichenfolge:

jdbc: as400: // servername; Bibliotheken = * libl; Benennung = System; Fehler = full ,

Mit dieser Verbindung der resultierenden Fehler wie dieser wären:

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

Die Lösung

So schließlich, wenn Sie nicht STRSQL verwenden können, ist eine andere Lösung iSeries Navigator zu verwenden, genaue „Skripte Run SQL“ seine sein (es in der Regel ist hier -> „% Programfiles% \ IBM \ Clientaccess \ Shared \ cwbundbs.exe ").

Vor allem aber haben Sie einen Systemantwortparameter ( nur einmal pro Maschine ) hinzuzufügen

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

Dies ist in "Green-Screen" durchgeführt. Dies stellt eine deafult Antwort ( ‚I‘) auf CPA32B2 Anfragenachricht. Die CPA32B2 ist eine interne Massage-ID, die zu einem Drop-Spalte Betrieb gebunden ist.

(Es ist im Moment nicht auf „Green-Screen“ durchgeführt werden müssen, verwenden Sie es wie CHGJOB Befehl. Beispiel:

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

)

Jetzt können Sie „Ausführen von SQL-Skripten“, der erste Befehl ausgeführt werden soll starten:

cl: CHGJOB INQMSGRPY (* SYSRPYL);

Dies ändert den aktuellen Auftragsparameter INQMSGRPY , zu * SYSRPYL. * SYSRPYL verursacht zu suchen, wenn ein System Antwort Parameter vorhanden ist, wenn eine Abfrage-Nachricht angezeigt werden soll.

Jetzt können Sie Ihr Alter laufen, die die Säule fällt.


Leider weiß ich nicht, wie man eine Spalte fallen zu lassen, nur JDBC verwenden. Wenn jemand weiß, lass es mich wissen.

Referenzen:

Andere Tipps

Schließlich fand ich eine Lösung:

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


ALTER TABLE <tablename> DROP COLUMN <column_name>;                

Es gibt nicht genügend Informationen in Ihre Fehlermeldung sicher sein, aber eine Primärschlüsselspalte fallen in der Regel ziemlich riskant und die Datenbank korrekt macht es schwierig.

Sie wahrscheinlich einen Fremdschlüssel haben diese Spalte beteiligt sind.

Do die Einschränkung nicht fallen und diese Spalte löschen, wenn Sie sicher sind, dass Sie wissen, was Sie tun.

Nach diesem Beitrag: http://bytes.com/topic / db2 / Antworten / 185467-Drop-Spalte-Tabelle

Es ist möglich, eine Spalte STRSQL im grünen Bildschirm-Umgebung fallen zu lassen. Ich habe Zugang zu diesem und es funktioniert, aber ein Client mit einem 400 nicht das Lizenzprogramm hat STRSQL zu verwenden. Das Problem ist, dass STRSQL aufgefordert wird, wenn dies etwas ist, ich möchte wirklich tun.

auf den Daten erhalten ich SQuirrel SQL-Client mit dem JT400 JDBC-Treiber bin mit ... Also ich mit dem System erraten Beharren auf Aufforderung (und eigentlich keine Möglichkeit, die prompt auch zu bekommen, ohne STRSQL) wird es nicht zulassen, ich tue es.

Also ich denke, ich bin stecken zu tun, was ich tue ... Erstellen eine neue Tabelle und die Daten zu kopieren und dann die Tabellen austauschen.

Der einzige Weg, fand ich zur Arbeit kommen jdbc ist, zuerst manuell die Standardeinstellung ändern für diese Nachricht. Dann ist Ihre Update-Anwendung ausgeführt werden. In unserem Fall verwenden wir Liquibase. Ich konnte die Java Command erhalten ADDRPYLE und CHGJOB INQMSGRPY (* SYSRPYL) zu nennen, aber es nie wirklich die alten table * drop Spalte erlaubt * nicht die Folgefehler geben:

Fehler:

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

Arbeits Befehl:

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

Referenz:

green screen - STRSQL geben Ihnen Fehler msg Antwort

alter table devlibsc / trklst Drop Spalte "ST"

Ändern der Datei TRKLST können Daten verloren gehen werden. (C I)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top