2009-06-15 1 views
2

は空の日付をチェックする次のコードを考えてみましょう:XQuery関数で空の日付引数をチェックする方法は?

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

実行すると、なぜ私は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:

答えて

0

を私だけしましたXQueryを試してみましたが、関数シグネチャ($dob as xs:date)が日付型を必要とするため、エラーが生成されていると思われます。空の値。

2

OK、私はこれを見て持っていたし、私はあなたが

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

注意として、あなたの関数を定義することで、クエリを実行することができると思いますか?型の後に - 引数が空のシーケンスかもしれないことを意味します。

私はSaxon-Bを使用してこれをOxygenでテストしました...申し訳ありませんが、私は使用しているソフトウェアにアクセスできません。

ここに私の関数定義があります。

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

trueを返し、このファイルに対して実行:

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

このファイルに対して実行

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

はfalseを返します。 questionmarkなしで同じ機能を実行

、第2の文書に、とのエラー:

重大度:エラー。説明:空のシーケンスは、tnsの最初の引数として使用できません。isEmptyDate()

0

型宣言の後に疑問符または星でこれを試してください。

例えば、

XSとしてDOB $:XSとしてDOB

$:日付:日付 は、$ DOBは(日付タイプxsの)1つのアイテムのシーケンスであることを意味?

XSとしてDOB $を: は、$ DOBは(日付タイプxsであるそれぞれが):1又はなしアイテムのシーケンスであることを意味* 日付は、$ DOBなしまたは複数の項目の配列であることを意味する(これらの各々

1

独自の関数を記述するのではなく、関数empty()を使用してください。シーケンスがカウント0の場合、Emptyはtrueを返します。xs:date?は、長さ0または1のシーケンスです。

関連する問題