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>