JSON w Oracle – zwracanie objektów JS z bazy danych do wykorzystania w AJAX i jQuery

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>

About Przemysław Kantyka

LinkedIn Profile I am a Consultant with 15 years of professional experience in Forms, Oracle, PL/SQL and APEX. I am a participant in the Oracle ACE program. As a Snowflake Data Engineer, I also work with data warehouse systems and perform analysis, ETL and tuning activities. I am also a co-organizer of Snowflake Meetup Group Poland and a speaker at international conferences (DOAG, Oracle Open World, APEX World). I am co-founder and developer of Oracle-Snowflake Connector. Visit dataconsulting.pl website
This entry was posted in Oracle SQL, Oracle SQL Zaawansowany, PL/SQL, PL/SQL Zaawansowany and tagged , , , , , , . Bookmark the permalink.

Leave a Reply