Comment utiliser des curseurs pour extraire des données de plusieurs tables
P粉141035089
2023-08-16 13:12:27
<p>J'ai une requête qui renvoie plusieurs tables, quelque chose comme ceci : </p>
<pre class="brush:php;toolbar:false;">SELECT Nom de la table, Nom de la base de données +'.'+ Nom de la table, Nom de la colonne
DE DBC.Colonnes
OÙ NomColonne = 'id'</pre>
<p>Je dois parcourir ces tableaux en examinant les informations qui y sont stockées afin d'obtenir uniquement des tableaux spécifiques. </p>
<p>J'ai essayé le code ci-dessous, en utilisant 'LOOP' et un curseur, mais il indique <code>Invalid query</code> (le code vient d'ici) : </p>
<pre class="brush:php;toolbar:false;">DÉCLARE curseur_Tables CURSEUR POUR
SELECT Nom de la base de données ||
DE DBC.Colonnes
OÙ NomColonne ='id';
OUVRIR Curseur_Tables ;
étiquette1 :
BOUCLE
FETCH curseur_Tables dans tbName ;
SI (SQLSTATE ='02000') ALORS
QUITTER l'étiquette1 ;
FIN SI;
CAS QUAND (
SÉLECTIONNER LE COMPTE(*)
DE prd3_db_tmd.K_PTY_NK01
OÙ identifiant = 0 ) >
ALORS tbName
FIN
Étiquette de FIN DE BOUCLE1 ;
FERMER curseur_Tables ;
FIN;≪/pré>
<p>Comment dois-je résoudre ce problème ? Dois-je utiliser des procédures stockées supplémentaires ? Le SGBD est Teradata. </p>
S'il s'agit de SQL Server, vous pouvez consulter le Curseur SQL suivant, j'ai modifié la déclaration du curseur et le code qu'elle contient Bien qu'ils puissent être différents de vos exigences, je pense que vous pouvez facilement les modifier
Vous avez besoin d'une procédure stockée car c'est le seul endroit où les curseurs peuvent être utilisés dans Teradata.