Guest User

Untitled

a guest
Dec 10th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. CREATE TYPE EMA_ROW AS OBJECT ( T_TIME VARCHAR2(50), EMA NUMBER );
  2.  
  3. CREATE TYPE EMA_TAB IS TABLE OF EMA_ROW;
  4.  
  5. CREATE OR REPLACE FUNCTION GET_EMA_TAB () RETURN
  6. EMA_TAB PIPELINED
  7. IS
  8. AMOUNT NUMBER;
  9. BEGIN
  10. SELECT COUNT(*) INTO AMOUNT FROM RTS_PRICE;
  11. FOR i IN 1 .. AMOUNT LOOP
  12. PIPE ROW(t_tf_row(i, 'Description for ' || i));
  13. END LOOP;
  14. RETURN;
  15. END GET_EMA_TAB;
  16.  
  17.  
  18. SELECT * FROM RTS_PRICE
  19.  
  20.  
  21. CREATE OR REPLACE FUNCTION GET_EMA(I IN NUMBER, N IN NUMBER) RETURN NUMBER
  22. IS
  23. F_PRICE NUMBER;
  24. BEGIN
  25. SELECT PRICE INTO F_PRICE FROM RTS_PRICE;
  26. IF n < 2
  27. THEN RETURN F_PRICE;
  28. ELSE RETURN GET_EMA(I - 1, N) + (F_PRICE - GET_EMA(I - 1, N)) * 2 / N;
  29. END IF;
  30. END GET_EMA;
  31.  
  32. CREATE OR REPLACE PROCEDURE FILL_EMA
  33. IS
  34. PREV NUMBER;
  35. CURR NUMBER;
  36. BEGIN
  37. select NVL(MIN(PRICE), 0) INTO PREV from (select PRICE from RTS_PRICE order by TICK_TIME) where rownum = 1;
  38. FOR vItems IN (
  39. SELECT TICK_TIME, PRICE
  40. FROM RTS_PRICE
  41. ORDER BY TICK_TIME
  42. )
  43. LOOP
  44. CURR := PREV + (vItems.PRICE - PREV) * 2 / 10;
  45. INSERT INTO EMA_T(TICK_TIME, PRICE) VALUES(vItems.TICK_TIME, CURR);
  46. PREV := CURR;
  47. END LOOP;
  48. RETURN;
  49. END FILL_EMA;
  50.  
  51. begin
  52. FILL_EMA;
  53. end;
  54.  
  55. SELECT * FROM RTS_PRICE
  56.  
  57. --------------------------------------------------------------------------------
  58. CREATE TABLE EMA_T(
  59. TICK_TIME VARCHAR2(100),
  60. PRICE NUMBER
  61. );
  62.  
  63. DROP TABLE EMA_T;
  64. SELECT * FROM EMA_T
  65.  
  66. select * from (select * from RTS_PRICE
  67. order by TICK_TIME)
  68. where rownum = 1;
  69.  
  70. SELECT MIN(PRICE) FROM RTS_PRICE ORDER BY TICK_TIME
  71. select MIN(PRICE) from (select PRICE from RTS_PRICE order by TICK_TIME) where rownum = 1;
  72. select NVL(MIN(PRICE), 0) from (select PRICE from RTS_PRICE order by TICK_TIME) where rownum = 1;
  73.  
  74. SELECT * FROM EMA_T;
  75. SELECT COUNT(*) FROM RTS_PRICE
  76.  
  77.  
  78. SELECT * FROM RTS_PRICE
  79. SELECT * FROM EMA_T
  80.  
  81. CREATE VIEW RTS_EMA AS SELECT RTS_PRICE.TICK_TIME, RTS_PRICE.PRICE RTS_PRICE, EMA_T.PRICE EMA_PRICE FROM RTS_PRICE, EMA_T WHERE RTS_PRICE.TICK_TIME = EMA_T.TICK_TIME
Add Comment
Please, Sign In to add comment