Question

Je cherche à exécuter la commande suivante dans KornShell (ksh):

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`

Qu'est-ce que je tente de réaliser est de placer une liste des index sur une table particulière dans un tableau que je peux plus tard itérer.

Le problème est, quand je lance la commande ci-dessus le contenu du tableau commence avec le message d'erreur « SQL1024N » (ce qui me dit que la connexion de base de données n'existe pas).

Cependant, si je retire la fin awk de la déclaration comme ceci:

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`

il fonctionne très bien (bien, dans la mesure où ce sont des données de retour. Il est évident que sans <=> je ne suis pas capturer les données correctes).

Quelqu'un sait-il pourquoi le est d'avoir cette <=> affecte?

Je comprends qu'il y a plus d'une façon d'obtenir ces données, mais il me déconcerte pourquoi cela se passe.

Merci d'avance.

Était-ce utile?

La solution

Dans ce cas, lorsque le CLP DB2 dit que ce n'est pas connecté à la base de données, il est parce que la coquille a ouvert un sous-processus qui nécessite son propre processus de back-end de db2bp dédié, qui ne peut pas accéder à la connexion ouverte par la coquille d'origine processus. Ce n'est pas que quelque chose est se déconnecter, il est qu'un processus shell nouvellement créé (et son processus de db2bp d'accompagnement) sont créés, mais ne leur dit pas de se connecter à une base de données. Une façon de remédier à cette situation est de relier explicitement (ou re-connexion) à la base de données lorsque vous savez que vous êtes dans une de ces situations.

set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`

Je me rends compte que cette question est plus sur les scripts et awk avec DB2 que sur le catalogue système, ou bien j'aurais recommandé des requêtes de catalogue simples pour produire le même résultat.

Autres conseils

Je doute que ce soit awk en soi. Peut-être est db2 particulièrement sur stdout étant connecté à un téléscripteur ou une console? Ou au moins n'aime pas quand il est connecté à un tuyau.

est inhabituel, et comme Pez dit qu'il est probablement une bizarrerie db2.

J'ai vu des problèmes similaires quand, par exemple en utilisant le temps ou timex avant une chaîne de commande db2, où db2 ne dispose pas d'une base de données définie pour se connecter à.

Il y a un DB2DBDFT variable d'environnement qui définit une base de données par défaut pour les connexions implicites. Je suis désolé de dire que je ne sais pas si cette variable est disponible pour les utilisateurs non-DBA (en supposant que vous êtes un développeur d'applications). Il mérite d'être étudié si le réglage de cette variable via:

db2set DB2DBDFT = $ {} your_db_name

Et réessayant votre requête.

Si vous avez plusieurs bases de données de votre environnement pourrait se connecter à vous pouvez déconfigurer la variable DB2DBDFT une fois que vous avez terminé votre travail.

Essayez la commande db2 avec le commutateur -x:

db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" ....

J'ai eu des cas où cela a guéri mon incapacité à la sortie du tuyau à awk.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top