Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- CREATING TABLE FLIHTS
- CREATE TABLE FLIGHTS ( SOURCE VARCHAR(20), DESTIN VARCHAR(20), FLIGHT_TIME NUMBER(3,1));
- -- POPULATING TABLE FLIGHTS
- INSERT INTO FLIGHTS VALUES ('San Jose', 'Los Angeles', 1.3);
- INSERT INTO FLIGHTS VALUES ('New York', 'Boston', 1.1);
- INSERT INTO FLIGHTS VALUES ('Los Angeles', 'New York', 5.8);
- -- HACK MAKING USE OF THE PATH AS A REPRESENTATION OF WHAT NEEDS TO BE DONE
- -- REF. https://databaseline.bitbucket.io/how-to-multiply-across-a-hierarchy-in-oracle-part-1/
- CREATE OR REPLACE FUNCTION eval_expr (expr_in IN VARCHAR2)
- RETURN NUMBER
- AUTHID CURRENT_USER
- DETERMINISTIC
- RESULT_CACHE
- IS
- PRAGMA UDF;
- v_res NUMBER;
- BEGIN -- STORE PROCEDURE WAS MODIFIED TO AVOID THE SELECT CLAUSE
- EXECUTE IMMEDIATE 'BEGIN :out := ' || expr_in || '; end;' USING OUT v_res;
- RETURN v_res;
- END eval_expr;
- /
- -- USING SYS_CONNECT_BY_PATH TO CREATE THE ACCUMULATED FLIGHT TIME AND REMOVING LEADING + SIGN
- SELECT CONNECT_BY_ROOT source, destin,
- EVAL_EXPR(SUBSTR(SYS_CONNECT_BY_PATH(TO_CHAR(flight_time), '+'),2)) AS "Total Flight Time",
- SYS_CONNECT_BY_PATH(destin, '/') "Path", LEVEL
- FROM FLIGHTS
- START WITH source IN (SELECT source FROM flights)
- CONNECT BY PRIOR destin = source
- ORDER BY LEVEL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement