Comment exécuter des commandes dans un fichier à l'intérieur de la base de données de la console?
Quelqu'un peut s'il vous plaît dites s'il est possible d'exécuter un script shell à l'intérieur d'une base de données.
Scénario:
À l'aide de la base de données Informix. J'ai un script dans un fichier pouvant avoir plusieurs états d'insertion. Je suis de l'ouverture de la connexion de base de données. La création de quelques tables temporaires et de l'exécution de certaines jointures. Afin de charger des données dans une table temporaire, j'ai besoin de l'insert dans "fichier".
Question:
Est-il un moyen ou une solution de contournement pour que je puisse exécuter les commandes dans le fichier à l'intérieur de la base de données de la console? Comme je suis entrain de créer plusieurs tables temp je ne peut pas se permettre de fermer la connexion de base de données.
- cut & coller dans le fichier?
- Marque, mais je ne peux pas faire cela. Je suis en cours d'exécution d'un script shell qui ouvre la connexion de base de données. J'espère que vous obtenez ce qui est le problème.
- gotcha. ne informix ont une interface en ligne de commande le long des lignes de ce que mysql?
mysql < commands.sql
avec tout ce informix, l'équivalent serait le chemin à parcourir. - je suis juste à l'aide de mastic de terminal pour exécuter le script shell. À l'intérieur de ce script shell, je suis prise de connexion au serveur informix à l'aide de dbaccess $DBNAME <<. Maintenant, ici, je suis la création de tables temporaires, donc je ne peut pas se permettre de fermer la connexion et d'exécuter un autre script.
Vous devez vous connecter pour publier un commentaire.
Pour passer un script pour une connexion de base de données sur la ligne de commande, vous effectuez les opérations suivantes:
ou
(si le fichier contient un
DATABASE
instruction dans la partie supérieure.)Pour insérer des données, tandis que le traitement de ce fichier, assurez-vous que le fichier contient quelque chose comme:
MISE À JOUR ORIGINALE DE RÉPONSE
À intégrer SQL dans un script shell, vous pouvez utiliser un "here document" approche, je pense que c'est à quoi vous faites référence:
Maintenant, vous pouvez modifier le comportement de SQL à l'aide de script ou des variables d'environnement en cas de besoin...
où
$VALUE
seront interpolées par le shell pour vous au moment de l'exécution, et nourrir la base de données Informix, comme si il ont été codées en dur.Vous pouvez même injecter du SQL par l'incorporation d'un sous-processus du shell...
Et même qui sera traité par le dbaccess processus, comme si c'étaient tous de la partie du document ici (mais c'est rare et franchement assez bizarre chose à faire).
Cependant, si ce que vous demandez est pouvez-vous en quelque sorte suspendre ou d'interrompre la requête en vue de l'affecter en quelque sorte, d'examiner le contenu de la table temporaire ou de modifier d'une certaine façon, la réponse est non, vous ne pouvez pas.
Un truc plus utile de rappeler. Définition de la variable d'environnement
DBACCNOIGN
à une valeur différente de zéro de la force de toute erreur dans la doc de traitement SQL pour annuler la totalité de la chaîne de traitement. Le comportement par défaut de dbaccess est pour signaler l'erreur et passer à l'instruction suivante.J'espère que ça aide.