2010-08-11 9 views

Répondre

1

Ceci est une analogie des fonctions de table DB2 mais sans spécification de liste de colonnes.

E.g. quelque chose comme ça:

create function do_some_stuff() returns table(<column_list>) 
language sql 
begin atomic 

    return 
    select t.* from some_table t; 

[email protected] 

sans spécification <column_list>. De telles fonctions peuvent renvoyer une table avec un ensemble de champs différent en fonction des paramètres transmis et de la logique interne. Dans la plupart des cas, ce type de résultat de fonction est utilisé pour renvoyer les résultats au client.

Le type de déclaration basé sur REF_CURSOR est la seule façon de le faire dans Oracle 8, mais depuis Oracle 9i, il existe un type intégré sys_refcursor (voir par exemple here). Comme la déclaration est de type faible et que DB2 (pour autant que je sache) n'a pas d'équivalent pour sys_refcursor, la conversion automatique ne peut pas décider comment convertir de telles déclarations.

La seule façon de le convertir est de regarder dans la procédure stockée et de reconstruire manuellement l'ensemble des champs retournés dans le curseur. Ensuite, vous pouvez réécrire la déclaration Oracle avec un curseur typé fort et le traiter avec MTK. Ou réécrire manuellement la logique du côté DB2 ...


Mise à jour:

  1. DB2 supporte les curseurs de type faible.
  2. Solutions pour les problèmes de compatibilité de migration décrites dans le livre IBM, disponible here (ATTENTION: le fichier .PDF). A propos 3.18MB recherche la chaîne "ref_cursor" ici.
+0

Merci. Vous semblez impliquer que MTK sera capable de traiter des curseurs fortement typés. Est-ce exact? –

+0

Désolé, mais je n'ai pas assez d'expérience de DB2, mais ils nous ont répondu à type de votre question sur les capacités MTK - voir la mise à jour de réponse. – ThinkJet

Questions connexes