Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Query rewrite option is not working

Ram_AAug 10 2020 — edited Aug 17 2020

Hi Experts,

Query rewrite option is not working.

I have created the following materialized view  with "enable query rewrite option".

ALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE;

create materialized VIEW mv12

REFRESH COMPLETE ON demand

enable query rewrite

as

select d.deptno,sum(e.sal) from emp e,dept d

where e.deptno=d.deptno

GROUP BY d.deptno;

The query is using tables instead of MVIEW. Could you please help me.

Why it'snot using MVIEW.

select d.deptno,sum(e.sal) from emp e,dept d

where e.deptno=d.deptno

and d.deptno=10

GROUP BY d.deptno;

Thanks in advance.

This post has been answered by Jonathan Lewis on Aug 10 2020
Jump to Answer

Comments

thatJeffSmith-Oracle

If you have a rest api with ORDS, it can accept a json payload and it can be stored natively as a json document in the database, or as rows in a table. There are multiple code/feature paths you can take to accomplish this.
ORDS is responsible for serving up the REST APIs, not for CALLING APIs. To call a REST API from the database, you'd use an apex helper package or write your own UTL.HTP calls.

User_H3J7U

Call Rest API from oracle and convert the json content into oracle table data fields and store in the database - is it possible solution? if so , how?

-- Original rest http://openexchangerates.org/api/currencies.json:
-- {
--  "AED": "United Arab Emirates Dirham",
--  "AFN": "Afghan Afghani",
--  "ALL": "Albanian Lek",
--  "AMD": "Armenian Dram",
--  "ANG": "Netherlands Antillean Guilder",
-- ...
with function json_transpose(jsn clob) return clob as
-- {key1:value1,...} -> [{name:key1,value:value1},...]
  ctx dbms_mle.context_handle_t;
  res clob := empty_clob()||'';
begin
  ctx := dbms_mle.create_context();
  dbms_mle.export_to_mle(ctx, 'jsn', jsn);
  dbms_mle.eval(ctx, 'JAVASCRIPT', q'<
    const bind = require("mle-js-bindings");
    const lob = bind.importValue("jsn");
    const src = JSON.parse(lob.read(lob.length(),1));
    const tgt = [];
    for(const elm in src) tgt.push({name:elm,value:src[elm]});
    tgt
    >', res);
  dbms_mle.drop_context(ctx);
  return res;
end;
rest as (select json_transpose(httpuritype('http://openexchangerates.org/api/currencies.json').getclob()) j from dual)
select *
from rest
     nested j[*] columns(name, value)
where rownum<=5;
/

NAME  VALUE                                   
----- ----------------------------------------
AED   United Arab Emirates Dirham             
AFN   Afghan Afghani                          
ALL   Albanian Lek                            
AMD   Armenian Dram                           
ANG   Netherlands Antillean Guilder           
CT_Resident

Thanks Jeff, Yes I need to call the Rest API by GET , can you send me links for example usiing Apex package and utl htttp

thatJeffSmith-Oracle

If you Google for them, you will find them in the usual places by the usual people.

1 - 4

Post Details

Added on Aug 10 2020
5 comments
894 views