Oracle umożliwia natywną konfigurację protokołu REST umożliwiającą odwołania do bazy danych z poziomu protokołu HTTP (z przeglądarki internetowej). Dzięki temu możemy komunikować się z bazą danych z wykorzystaniem np. jQuery lub technologii AJAX i uzyskiwać w warstwie JavaScript strony wywołującej obiekty JSON wygenerowane w warstwie PL/SQL’a. W tym poście zobaczysz jak wygenerować obiekty JSON i jak je pobrać z bazy z wykorzystaniem technologi jQuery (AJAX).Przykład:
Ręczne generowanie JSON w zapytaniu SQL:
SELECT '{' || '"COMMISSION_PCT":"' || COMMISSION_PCT ||'",' || '"DEPARTMENT_ID":"' || DEPARTMENT_ID ||'",' || '"EMAIL":"' || EMAIL ||'",' || '"EMPLOYEE_ID":"' || EMPLOYEE_ID ||'",' || '"FIRST_NAME":"' || FIRST_NAME ||'",' || '"HIRE_DATE":"' || HIRE_DATE ||'",' || '"JOB_ID":"' || JOB_ID ||'",' || '"LAST_NAME":"' || LAST_NAME ||'",' || '"MANAGER_ID":"' || MANAGER_ID ||'",' || '"PHONE_NUMBER":"' || PHONE_NUMBER ||'",' || '"SALARY":"' || SALARY ||'"' || '}' FROM emp WHERE EMPLOYEE_ID = 100;
Wiedząc jak uzyskać obiekt w formacie JSON możemy go wysłać do przeglądarki korzystając z protokołu REST:
CREATE OR REPLACE PROCEDURE emp_ws(p_id NUMBER) IS v_res VARCHAR2(4000); BEGIN SELECT '{' || '"COMMISSION_PCT":"' || COMMISSION_PCT ||'",' || '"DEPARTMENT_ID":"' || DEPARTMENT_ID ||'",' || '"EMAIL":"' || EMAIL ||'",' || '"EMPLOYEE_ID":"' || EMPLOYEE_ID ||'",' || '"FIRST_NAME":"' || FIRST_NAME ||'",' || '"HIRE_DATE":"' || HIRE_DATE ||'",' || '"JOB_ID":"' || JOB_ID ||'",' || '"LAST_NAME":"' || LAST_NAME ||'",' || '"MANAGER_ID":"' || MANAGER_ID ||'",' || '"PHONE_NUMBER":"' || PHONE_NUMBER ||'",' || '"SALARY":"' || SALARY ||'"' || '}' INTO v_res FROM emp WHERE EMPLOYEE_ID = To_Number(p_id); Htp.print(v_res); EXCEPTION WHEN No_Data_Found THEN Htp.print('{}'); END; /
a następnie wykorzystać z poziomu np. jQuery/JavaScript/AngularJS/AJAX itp.
Przykład w jQuery:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> </head> <body> <script> (function() { $.getJSON( 'http://localhost:8080/xdb_dad/emp_ws?p_id=100', function( data ) {window.alert(data.LAST_NAME);} );} )(); </script> </body> </html>