Utilisation d'Iseries Navigator 'Exécuter une fenêtre SQL Script' J'ai créé une nouvelle fonction de table. Lorsque je vais à la branche Fonctions sous le schéma où il a été créé, je vois la fonction entre les autres. Mais lorsque j'appelle la fonction de la même manière une fenêtre de script SQL, je reçois une erreur:
SELECT * FROM TABLE(TESTDAT.FNREPORT(DATE('10/23/2013'), DATE('10/23/2013'), 'ANY')) AS T
SQL State: 42704
Vendor Code: -204
Message: [SQL0204] FNREPORT in TESTDAT type *N not found.
Utilisation du client SquirRelSQL, je peux également voir la fonction dans le schéma, mais ne peut pas l'appeler en raison de la même erreur. Je peux appeler d'autres fonctions dans le schéma, mais pas celle que je viens de créer. Quelle peut être la raison?
Je peux appeler générer SQL, copier/coller le schéma et le nom de la fonction dans la fenêtre de requête, puis il lancera l'erreur ci-dessus.
Mettre à jour:
Code source complet de la fonction
CREATE FUNCTION TESTDAT.FNREPORT (
DATESTART DATE ,
DATEEND DATE ,
ICLASS CHAR(3) )
RETURNS TABLE (
A INTEGER )
LANGUAGE SQL
SPECIFIC TESTDAT.FNCMSREPORT
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
DISALLOW PARALLEL
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
DECRESULT = (31, 31, 00) ,
DFTRDBCOL = *NONE ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
BEGIN ATOMIC
RETURN
SELECT 1 AS A FROM SYSIBM . SYSDUMMY1 ;
END ;
Juste pour clarifier que les solutions suggérées ci-dessous ne fonctionnaient pas. Si la requête ci-dessus a été changée à
SELECT * FROM TABLE(TESTDAT.FNREPORT(DATE('10/23/2013'), DATE('10/23/2013'), CAST('ANY' AS CHAR()3)) AS T
ou le paramètre ICLASS supprimé ou tous les paramètres retirés de la définition de la fonction, la même erreur exacte a été rapportée.
Comme Heinz Z. a fait , j'ai découvert le problème.
Un de vos paramètres de fonction est char
, pendant que vous passez la chaîne littéral 'ANY'
, qui est considéré comme un varchar
. Le moteur de base de données recherche une version surchargée de la fonction avec varchar
paramètres, mais ne le trouve pas.
La solution est soit
varchar
ou paramètre coulant sur char
dans l'appel de la fonction:
SELECT *
FROM TABLE(TESTDAT.FNREPORT(DATE('10/23/2013'),
DATE('10/23/2013'),
CAST('ANY' AS CHAR(3))
)) AS T
Si cela ne fonctionne pas, essayez de supprimer tous les paramètres de la fonction et de voir si ils sont les coupables. Ensuite, vous pouvez enquêter plus profondément en ajoutant un par un, essayez de travailler sur le format des dates, par exemple, vous pouvez essayer de passer current date
au lieu du 10/23/2013.
Aussi, vous devez expliquer pourquoi il pense que FNREPORT
est un type et non une fonction ...
Commencez avec cette instruction avant d'essayer d'exécuter la fonction:
SET PATH TESTDAT;