2016-10-10 2 views
0

以下のコードを実行すると、NULL SELF引数でのメソッドディスパッチが許可されません。私は手動でXMLファイルを調べ、「OtherLocation」が空白になることがあることを発見しました。私はそのノードに関連付けられている行をコメントアウトし、エラーを修正しました。私は、イベント情報を保持する大きなXMLファイルを扱っています。あるイベントは情報を提供し、他のイベントは情報を提供しなかった。SQL Developerで空のXMLノードに等しい変数を設定する方法

情報があればそれを含める必要があり、そうでなければ変数を ''に設定する必要があります。

どうすればよいですか?

WHILE l_xml.existsNode('/ResultOfEvent/Items/Event[' || v_count || ']') = 1 LOOP 

    l_eventid := l_xml.extract('/ResultOfEvent/Items/Event[' || v_count || ']/EventId/text()').getStringVal(); 
    l_eventname := l_xml.extract('/ResultOfEvent/Items/Event[' || v_count || ']/EventName/text()').getStringVal(); 
    l_organizationid := l_xml.extract('/ResultOfEvent/Items/Event[' || v_count || ']/OrganizationId/text()').getStringVal(); 
    l_organizationname := l_xml.extract('/ResultOfEvent/Items/Event[' || v_count || ']/OrganizationName/text()').getStringVal(); 
    l_description := l_xml.extract('/ResultOfEvent/Items/Event[' || v_count || ']/Description/text()').getStringVal(); 
    --l_otherlocation := l_xml.extract('/ResultOfEvent/Items/Eventt[' || v_count || ']/OtherLocation/text()').getStringVal(); 
    insert into xml_test values(l_eventid, l_eventname, l_organizationid, l_organizationname, l_otherlocation, l_description); 

    v_count := v_count + 1; 
    END LOOP; 

EDIT

xml.extract上でより多くの研究をしている時に、私は、XML要素が空の場合にはnullのXMLTypeを返すことがわかりました。追加しようとする前にnullをチェックする方法はありますか?要素が空の場合、対応する表に ''を挿入する必要があります。

答えて

0

しばらくして、私は最終的に実用的な解決策を考え出すことができました。以下のコードを変更すると、エラーは発生しません。 XMLTypeのに等しい新しい変数v_otherlocationを作成する

WHILE l_xml.existsNode('//ResultOfEvent/Items/Event[' || v_count || ']') = 1 LOOP 
    l_eventid := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/EventId/text()').getStringVal(); 
    l_eventname := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/EventName/text()').getStringVal(); 
    l_organizationid := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/OrganizationId/text()').getStringVal(); 
    l_organizationname := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/OrganizationName/text()').getStringVal(); 

    v_otherlocation := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/OtherLocation/text()'); 
    if v_otherlocation IS NULL then 
     l_otherlocation := ' '; 
    else 
     l_otherlocation := v_otherlocation.getStringVal(); 
    end if; 

    l_description := l_xml.extract('//ResultOfEvent/Items/Event[' || v_count || ']/Description/text()').getStringVal(); 
    insert into XMLPROCESSEDTABLE values(l_eventid, l_eventname, l_organizationid, l_organizationname, l_otherlocation, l_description); 
    v_count := v_count + 1; 
END LOOP; 

は、問題を修正するものです。私が得たエラーは、getStringVal()のためです。 l_xml.extractがnullを返した場合、getStringVal()はnullオブジェクトから値を取得しようとしていました。

関連する問題