私はORDSを初めて使用しています。私はAPEX_JSONを使用して、ソース・タイプがPL/SQLのレスト・サービスのjsonオブジェクトを作成しています。 私が作成しているjsonオブジェクトは複雑です。 jsonオブジェクトの作成中に何か問題が発生した場合は、ボディに異なるjson構造を持つエラーを返す必要があります。 エラーのためにボディを作成する前に、私がこの点まで作成したjsonをクリアしたいと思います。 どうすればいいですか?あるいは、これを達成する他の方法がありますか?APEX_JSONが作成したJSONオブジェクトをクリアするには
PROCEDURE GETNODES(I_LOCATION IN NUMBER)
V_STATUS NUMBER;
BEGIN
APEX_JSON.OPEN_OBJECT;
APEX_JSON.OPEN_ARRAY('NODES');
FOR nodes in (select NAME FROM NODES where location = I_LOCATION) LOOP
APEX_JSON.OPEN_OBJECT;
APEX_JSON.write('NAME',nodes.name);
V_STATUS := getnodestatus(nodes.name); --This can throw an exception
APEX_JSON.write('STATUS',V_STATUS);
APEX_JSON.CLOSE_OBJECT;
END LOOP;
APEX_JSON.CLOSE_ARRAY;
APEX_JSON.CLOSE_OBJECT;
EXCEPTION WHEN OTHERS THEN
--IF I get any error, then I have to write a different json, so I have to clear the json written till now, how to do it?
APEX_JSON.OPEN_OBJECT;
APEX_JSON.write('ERROR CODE',SQLCODE);
APEX_JSON.write('ERROR MSG',SQLERRM);
APEX_JSON.CLOSE_OBJECT;
END;
PS:上記コードは単なる例です。ループの中に書いているJSONオブジェクトは、複数のレベルの配列ではるかに複雑です。
どうもありがとうティム、それは働きました。 しかし、このようにして、 'owa_util.mime_header(' application/json ')'を呼び出して、コンテンツタイプ(mimeタイプ)を手動でjsonに設定する必要がありました。デフォルトでは 'text/html'に設定されていました。 これは正しい方法ですか、それとも別の方法ですか? –
それは問題ありません。また、大規模なCLOBを適切に処理することを忘れないでください。それが32Kより大きい場合は、ゲートウェイ上でチャンク内にプッシュする必要があります。 https://oracle-base.com/dba/script?category=miscellaneous&file=string_api.sql –