Analyser JSON dans la table Oracle à l'aide de PL / SQL
J'ai créé le script suivant pour lire des données à partir de l'Application Mobile DB (qui est basé sur MongoDB) de Oracle SQL Developer:
DÉCLARER l_param_list VARCHAR2(512); l_http_request UTL_HTTP.req; l_http_response UTL_HTTP.reee; l_response_text VARCHAR2(32767); COMMENCER -- service les paramètres d'entrée de -- la préparation de la Demande... l_http_request := UTL_HTTP.begin_request ('https://api.appery.io/rest/1/db/collections/Photos?where=%7B%22Oracle_Flag%22%3A%22Y%22%7D' 'GET' 'HTTP/1.1'); - de définir l'en-tête des attributs UTL_HTTP.set_header(l_http_request, 'X-Appery-Base de données-Id', '53f2dac5e4b02cca64021dbe'); --UTL_HTTP.set_header(l_http_request, 'Content-Length', LONGUEUR(l_param_list)); - de définir les paramètres d'entrée -- UTL_HTTP.write_text(l_http_request, l_param_list); -- obtenir de Réponse et d'obtenir la valeur reçue l_http_response := UTL_HTTP.get_response(l_http_request); UTL_HTTP.read_text(l_http_response, l_response_text); DBMS_OUTPUT.put_line(l_response_text); insérez dans appery valeurs(l_response_text); -- finalisation UTL_HTTP.end_response(l_http_response); EXCEPTION LORSQUE UTL_HTTP.end_of_body PUIS UTL_HTTP.end_response(l_http_response); FIN; /
La réponse (l_response_text) est un JSON comme chaîne de caractères. Par exemple:
[{"Code postal":"47100","OutletCode":"128039251","MobileNumber":"0123071303","_createdAt":"2014-11-10 06:12:49.837","_updatedAt":"2014-11-10 06:12:49.837"}, {"code Postal":"32100","OutletCode":"118034251", ..... ]
Le code fonctionne très bien, et les insertions de la réponse dans une colonne de table appelé appery. Cependant, j'ai besoin d'analyser cette réponse, de sorte que chaque tableau va dans sa colonne spécifique dans une table appelée appery_test. Le tableau appery_test a un nombre de colonnes égal au nombre de JSON paires et dans le même ordre.
J'ai cherché et j'ai trouvé la plupart des résultats sur l'analyse Oracle de table en JSON et non l'inverse. J'ai trouvé, cependant, cette lien qui est assez similaire à mon problème. Cependant, la bibliothèque, la réponse n'est pas un exemple sur la façon de l'utiliser pour insérer JSON dans les classiques de la table à l'aide de PL/SQL.
N. B.: je suis en utilisant 11g et pas 12c. Ainsi, le construit en fonctions ne sont pas disponibles pour moi.
source d'informationauteur Hawk
Vous devez vous connecter pour publier un commentaire.
Depuis que cette question scores élevés dans les résultats, j'ai envie de poster cette variante préférée:
Oracle a publié APEX 5.0 (15 avril. 2015). Avec elle, vous obtenez un accès à une grande API pour travailler avec JSON
Je l'utilise sur 11.2 et ont été en mesure de resserrement chaque json, du plus simple au très complexe des objets avec de multiples tableaux et 4/5 niveaux. APEX_JSON
Si vous ne souhaitez pas utiliser l'APEX. Il suffit d'installer l'environnement d'exécution pour obtenir l'accès à l'API.
D'exemples d'utilisation, de données à partir de json.org l'exemple de la :
Résultat:
PL/SQL bloc exécuté
J'ai utilisé PL/librairie JSON. Plus précisément, JSON_EXT fonctions de package afin de l'analyser.
Le script suivant inspiré par Oracle réponse Communautaire a fonctionné pour moi
Avis que json_ext.get_string retuns seulement VARCHAR2 limitée à 32767 max. Afin d'utiliser le même package avec les plus grandes json_list et json_values (>32 KO) vérifier ici.
Si vous avez l'APEX 5.0 et au-dessus, la meilleure option et de bien meilleures performances via APEX_JSON paquet. Voir @Olafur Tryggvason's réponse pour plus de détails
Orace fournit PL/SQL DOM Api JSON de la manipulation. Recommande fortement de l'utiliser, car il fournit des tonnes d'utile Api.
https://docs.oracle.com/database/122/ADJSN/using-PLSQL-object-types-for-JSON.htm#GUID-F0561593-D0B9-44EA-9C8C-ACB6AA9474EE
dans Oracle 12:
https://docs.oracle.com/database/121/SQLRF/functions092.htm#SQLRF56973