DB2 400 drop column
Je veux supprimer une colonne appelée id
qui est une auto-incrémentation de PK.
SQL:
alter table "CO88GT"."XGLCTL" drop column id cascade;
Et j'obtiens:
Error: [SQL0952] Processing of the SQL statement ended. Reason code 10.
SQLState: 57014
ErrorCode: -952
Je peux me tromper mais je pense qu'il a quelque chose à voir avec la prévention de la table de perdre des données. Pour contourner ce problème j'ai besoin de créer une nouvelle table sans la colonne et de copier les données de la vieille table dans la nouvelle et puis remplacez le vieux tableau avec la nouvelle table.
source d'informationauteur Quaternion
Vous devez vous connecter pour publier un commentaire.
Info
AS400 est de vous donner un avertissement (enquête message) en raison de la possible perte de données, vous demandant d'Annuler ou de les Ignorer l'opération demandée. Ainsi, en raison de ce qui est une demande interactif, plus de JDBC/ODBC vous ne pouvez pas taper " I " de l'ignorer, et COMME vous jette un code d'erreur: -952 avec SQLState: 57014 et le code de Raison 10.
Dans la documentation de SQL0952 dit:
Si vous êtes à l'aide de JDBC et SQL erreur n'est pas auto-explicatif, vous pouvez faire une connexion JDBC avec le paramètre " erreurs=", qui va donner beaucoup plus d'informations sur l'erreur. Pour d'autres paramètres de connexion voir cette.
exemple de chaîne de connexion:
Avec qui la connexion de l'erreur qui en résulte serait comme ceci:
La solution
Donc finalement, si vous ne pouvez pas utiliser STRSQL, une autre solution est d'utiliser iSeries Navigator, pour être exact, de son "d'Exécuter les scripts SQL" (c'est généralement ici --> %Program Files%\IBM\Client Access\Shared\cwbundbs.exe").
Mais tout d'abord, vous devez ajouter un système de réponse de paramètre (qu'une seule fois par machine)
Ceci est fait dans "écran vert". Cela définit un défaut de réponse ("je") sur CPA32B2 enquête message. Le CPA32B2 est un massage intérieur de l'id, qui est lié à une baisse de la colonne de fonctionnement.
(En fait, il n'a pas à être fait dans "écran vert", l'utiliser comme CHGJOB de commande. Exemple :
)
Maintenant, vous pouvez commencer à "Exécuter les scripts SQL", la première commande à exécuter est:
cela modifie le travail en cours paramètre INQMSGRPY*SYSRPYL. *SYSRPYL causes à rechercher s'il existe un système de réponse paramètre lors d'une enquête message doit être affiché.
Vous pouvez maintenant exécuter votre alter qui supprime la colonne.
Malheureusement, je ne sais pas comment faire pour déplacer une colonne, juste à l'aide de JDBC. Si quelqu'un sait s'il vous plaît laissez-moi savoir.
Références:
J'ai finalement trouvé une solution:
Il n'y a pas assez d'informations dans votre message d'erreur pour être sûr, mais la suppression d'une colonne de clé primaire est généralement assez risqué et correctement la base de données rend difficile l'.
Vous avez probablement une contrainte de clé étrangère impliquant la colonne.
Ne pas tomber de la contrainte et de supprimer cette colonne, sauf si vous êtes sûr que vous savez ce que vous faites.
Selon ce post: http://bytes.com/topic/db2/answers/185467-drop-column-table
Il est possible de passer d'une colonne à l'aide de STRSQL dans l'écran vert de l'environnement. J'ai accès à cela et il fonctionne, mais un client avec un 400 ne pas avoir le logiciel à utiliser STRSQL. Le problème est que STRSQL demandera si c'est quelque chose que je veux vraiment faire.
Pour obtenir les données, je suis en utilisant SQuirrel SQL client avec le JT400 pilote JDBC... Donc je suppose qu'avec le système, en insistant sur des invites (et en fait aucun moyen d'en obtenir l'invite même sans STRSQL) il ne me laisse pas faire.
Donc je suppose que je suis coincé à faire ce que je fais... la création d'une nouvelle table et la copie des données, puis en échangeant les tables.
Le seul moyen que j'ai trouvé pour obtenir jdbc de travail est d'abord de modifier manuellement la valeur par défaut pour ce message. Puis exécutez votre application de mise à jour. Dans notre cas, nous utilisons Liquibase. J'ai pu obtenir la java CommandCall appeler ADDRPYLE et CHGJOB INQMSGRPY(*SYSRPYL), mais il n'a jamais réellement permis de l'instruction alter table * baisse de la colonne * de ne pas donner l'erreur de suivi:
Erreur:
Travail De Commande:
Référence:
écran vert -- STRSQL vous donnera l'erreur msg pour répondre à
alter table devlibsc/trklst baisse de la colonne "ST"
Modification du fichier TRKLST peut provoquer une perte de données. (C I)