2009-06-15 6 views
2

Consultez le code suivant qui vérifie une date vide:Comment vérifier un argument de date vide dans une fonction XQuery?

declare xqse function tns:isEmptyDate($dob as xs:date) as xs:boolean { 
    if(empty($dob)) then { 
    } 
} 

Une fois exécuté, pourquoi dois-je obtenir l'erreur ci-dessous ALDSP:

weblogic.xml.query.exceptions.XQueryDynamicException: {err}XP0021: "": can not cast to {http://www.w3.org/2001/XMLSchema}date: error: date: Invalid date value: wrong type:

Répondre

0

Je n'ai bricolé avec XQuery, mais je soupçonne que l'erreur est générée parce que la signature de la fonction ($dob as xs:date) nécessite un type de date et vous passez quelque chose d'autre, par exemple une valeur vide.

2

OK, je l'ai jeté un oeil à ce sujet et je pense que vous serez en mesure d'exécuter votre requête en définissant votre fonction

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean 

Notez la? après le type - cela signifie que l'argument peut être la séquence vide.

J'ai testé cela dans Oxygen, en utilisant Saxon-B ... désolé, je n'ai pas accès au logiciel que vous utilisez.

Voici ma définition de fonction.

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean { 
    let $empty := if (empty($dob)) 
     then true() 
     else false() 
    return $empty 
}; 

Courir contre ce fichier:

<?xml version="1.0" encoding="UTF-8"?> 
<datetime>2002-09-24</datetime> 

renvoie true, et en cours d'exécution contre ce fichier:

<?xml version="1.0" encoding="UTF-8"?> 
<dontmatch>2002-09-24</dontmatch> 

retourne false.

L'exécution de la même fonction sans questionmark, sur le second document, avec des erreurs:

Gravité: erreur. Description: Une séquence vide n'est pas autorisée en tant que premier argument de tns: isEmptyDate()

0

Essayez ceci avec un point d'interrogation ou une étoile après la déclaration de type.

par exemple

$ ddn comme xs: Date de signifie dob $ est une séquence de 1 point (de type xs: date)

$ ddn comme xs: Date? signifie dob $ a est une séquence de 1 ou articles Aucun (chacun d'entre eux sont de type xs: date)

$ DOB comme xs: Date * signifie dob de $ est une séquence d'aucun ou plusieurs éléments (chacun desquels sont de type xs: date)

1

Utilisez la fonction empty() au lieu d'écrire votre propre fonction. Vide retournera vrai si une séquence a un nombre zéro, où xs:date? peut être une séquence de longueur zéro ou un.

Questions connexes