Comment exécuter le SQL dynamique Teradata
Est-il possible de soumettre SQL générées de manière dynamique à Teradata? J'ai écrit une requête qui va créer le code pour éliminer une table. Maintenant, je suis en tirant le code de mon client (SAS) et de soumettre à nouveau dans une seconde étape. Je ne suis pas familiarisés avec Teradata macros ou des procédures; serait quelque chose comme ce que le travail?
Pour illustrer, j'ai une table est définie comme ceci:
create multiset table MYTABLE
( RECID integer generated always as identity
( start with 1
increment by 1
minvalue -2147483647
maxvalue 2147483647
no cycle )
, SNAP_DATE date format 'YYYY/MM/DD'
, EMAIL_DATE date format 'YYYY/MM/DD'
, FREQ integer
)
unique primary index ( RECID )
Le tableau est rempli tous les jours (SNAP_DATE
) et est utilisé pour surveiller les changements à un email_date dans une autre table. La requête suivante retourne le code que je peux utiliser pour créer mon dénormalisée vue:
select RUN_THIS
from (
select RUN_THIS, RN
from (
select 'select EMAIL_DATE ' (varchar(100)) as RUN_THIS
, 0 (int) as RN
) x
union all
select ', sum( case when SNAP_DATE = date '''
|| (SNAP_DATE (format 'yyyy-mm-dd') (char(10)) )
|| ''' then FREQ else 0 end ) as D'
|| (SNAP_DATE (format 'yyyymmdd') (char(8)) ) as RUN_THIS
, row_number() over ( partition by 1 order by SNAP_DATE ) as RN
from ( select distinct SNAP_DATE
from MYTABLE
where SNAP_DATE > current_date - 30) t1
union all
select RUN_THIS, RN
from (
select 'from MYTABLE group by 1 order by 1;' as RUN_THIS
, 10000 as RN
) y
) t
order by RN
J'ai exporter le résultat de la requête ci-dessus dans un fichier sur mon client, puis de tourner autour et de le soumettre fichier vers Teradata. J'espère qu'il est possible de stocker cette définition complète dans certains Teradata objet de sorte qu'il peut être exécuté directement.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez trouver le succès de mettre cela dans une procédure stockée à l'aide de la
DBC.SysExecSQL
de commande.Ici est trop simplifiée, une procédure stockée dans Teradata. Évidemment, dans la production auriez besoin d'un gestionnaire d'erreur défini traiter les choses comme des objets de base de données non valide. En outre, vous pouvez retourner le
SQLSTATE
en tant que paramètre à tester pour savoir si la procédure stockée terminée avec succès ou non.