Serveur d'impression

O2SS0359: Impossible d'obtenir la description du type de retour de l'expression d'appel de fonction (erreur) – SQL Server – Bien choisir son serveur d impression

Par Titanfall , le 25 février 2020 - 6 minutes de lecture

<! – ->

Cet article explique pourquoi l'Assistant Migration SQL Server (SSMA) pour Oracle ne peut pas convertir le jeu d'enregistrements renvoyé par la fonction.Cet article explique la raison pour laquelle SQL Server Migration Assistant (SSMA) pour Oracle n'est pas en mesure de convertir le jeu d'enregistrements qui est renvoyé par la fonction.

ContexteContexte

Une fonction est un bloc de code qui exécute une tâche particulière, puis renvoie le contrôle au code appelant.Une fonction est un bloc de code qui exécute une tâche particulière, puis renvoie le contrôle au code appelant. Lorsqu'il renvoie le contrôle, il renvoie également une valeur au code appelant.Lorsqu'il renvoie le contrôle, il renvoie également une valeur au code appelant. Lorsqu'une fonction renvoie une valeur, la valeur est renvoyée via une instruction return à l'appelant de la fonction, après avoir été implicitement convertie en type de retour de la fonction dans laquelle elle a été définie.Lorsqu'une fonction renvoie une valeur, la valeur est renvoyée via une instruction return à l'appelant de la fonction, après avoir été implicitement convertie en type de retour de la fonction dans laquelle elle a été définie.

Chaque fois que vous appelez une fonction qui renvoie un enregistrement dans une autre procédure, SSMA ne parvient pas à résoudre ce type de données.Chaque fois que vous appelez une fonction qui renvoie un enregistrement dans une autre procédure, SSMA n'est pas en mesure de résoudre ce type de données. Par conséquent, lorsque vous essayez d'utiliser ce jeu d'enregistrements dans la procédure appelée, SSMA génère un message d'erreur.Par conséquent, lorsque vous essayez d'utiliser cet ensemble d'enregistrements dans votre procédure appelée, SSMA génère un message d'erreur.

Exempleexemple

Prenons l'exemple ci-dessous, dans lequel nous avons print_empcréé une procédure, dans laquelle nous appelons get_employeeTbl une autre fonction qui renvoie un enregistrement.Considérez l'exemple ci-dessous dans lequel nous avons créé une procédure print_emp, dans laquelle nous appelons une autre fonction get_employeeTbl qui renvoie un record.

CRÉER OU REMPLACER LA PROCÉDURE print_emp (p_empl_no dans le type emp.empno%)
COMME
Proc_Table emp% rowtype;
COMMENCER
Proc_Table: = get_employeeTbl (p_empl_no);

dbms_output.put_line (Proc_Table.empno);
dbms_output.put_line (Proc_Table.ename);
dbms_output.put_line (Proc_Table.job);
dbms_output.put_line (Proc_Table.mgr);
dbms_output.put_line (Proc_Table.hiredate);
dbms_output.put_line (Proc_Table.sal);
dbms_output.put_line (Proc_Table.comm);
dbms_output.put_line (Proc_Table.deptno);
FIN;
/

CRÉER OU REMPLACER LA FONCTION get_employeeTbl (p_empl_no dans le type emp.empno%)
RETURN emp% rowtype
COMME
l_cust_record emp% rowtype;
COMMENCER
SELECT *
INTO l_cust_record
DE emp
OERE empno = p_empl_no;

RETOUR (l_cust_record);
FIN;

Lorsque SSMA tente de convertir le code ci-dessus à partir de print_empla principale procédure qu'il ne résout pas get_emploreeTbl opérations de la fonction appelée qui renvoie un enregistrement et génère donc le message d'erreur suivant:Lorsque SSMA essaie de convertir le code ci-dessus de la procédure principale print_emp, il ne résout pas les opérations de la fonction appelée get_emploreeTbl qui renvoie un enregistrement et génère donc le message d'erreur suivant:

O2SS0359: impossible d'obtenir la description du type de retour de l'expression d'appel de fonctionO2SS0359: Impossible d'obtenir la description du type de retour de l'expression d'appel de fonction

Solutions possiblesRemèdes possibles

La solution à l'erreur ci-dessus consiste à réécrire le code dans SQL Server.La solution de l'erreur ci-dessus consiste à réécrire le code dans SQL Server. Étant donné que SQL Server prend en charge les fonctions scalaires, les fonctions de table en ligne et les fonctions de table à instructions multiples, vous pouvez déclarer un @ma table table temporaire dans le code T-SQL de la fonction appelée.Comme SQL Server prend en charge les fonctions scalaires, les fonctions de table en ligne et les fonctions de table multi-instructions, vous pouvez déclarer une table temporaire @ma table dans le code T-SQL de la fonction appelée. Dans le code, vous remplissez cette table en utilisant la même logique métier, puis renvoyez cette table à l'environnement appelant.Dans le code, vous remplissez ce tableau en utilisant la même logique métier, puis renvoyez ce tableau à l'environnement appelant. Dans la procédure d'appel, vous devez également utiliser une variable de table pour stocker la valeur de retour (jeu d'enregistrements dans notre cas) de la fonction appelée.Dans la procédure d'appel, vous devez également utiliser une variable de table pour stocker la valeur de retour (jeu d'enregistrements dans notre cas) de la fonction appelée.

Voici le code réécrit pour l'exemple ci-dessus:Voici le code réécrit pour l'exemple ci-dessus:

CRÉER UNE PROCÉDURE [dbo].[PRINT_EMP](@p_empl_no Int)
COMME
COMMENCER
DÉCLARÉ
@Proc_table TABLE
(
EMPNO int,
ENAME varchar (max),
JOB varchar (max),
Flotteur MGR,
HIREDATE datetime,
Flotteur SAL,
Flotteur COMM,
Flotteur DEPTNO
);

INSÉRER DANS @Proc_table (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
SELECT * FROM dbo.GET_EMPLOYEETBL (@p_empl_no)

SELECT * FROM @Proc_table
FIN
ALLER

CRÉER UNE FONCTION [dbo].[GET_EMPLOYEETBL](@p_empl_no Int)
RETOURS @mytable TABLE
(
EMPNO int,
ENAME varchar (max),
JOB varchar (max),
Flotteur MGR,
HIREDATE datetime,
Flotteur SAL,
Flotteur COMM,
Flotteur DEPTNO
)
COMME
COMMENCER
INSÉRER DANS @mytable (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) SELECT
EMP.EMPNO,
EMP.ENAME,
EMP.JOB,
EMP.MGR,
EMP.HIREDATE,
EMP.SAL,
EMP.COMM,
EMP.DEPTNO
DE
dbo.EMP
OERE EMP.EMPNO = @p_empl_no

REVENIR
FIN
  • O2SS0380: impossible de convertir la fonction avec le type de retour d'enregistrementO2SS0380: Impossible de convertir la fonction avec le type de retour d'enregistrement

<! – ->

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.