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!

create function having, Select...Model , returns error..

652211Aug 29 2008 — edited Aug 30 2008
can anyone Suggest me with the corrections please.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> ed wtag

SQL> create or replace function get_wtavg(p_BROK_code IN varchar2, p_SECURIT_code IN varchar2, p_DATE IN DATE)
2 return number Is
3 BEGIN
4 select avgprice
5 from (
6 select t.*
7 from (
8 select seq_no
9 , invxh_DATE
10 , INVXH_code
11 , invxh_No
12 , invxH_total_qty
13 , INVXH_net_AMOUNT_Scy INVXH_net_AMOUNT_Scy
14 , balqty
15 , ROUND(balamt, 3) balamt
16 , ROUND(avgprice, 10) avgprice
17 , ROUND(cost, 3) cost
18 from (select b.*,
19 sum(decode(invxh_code, 'BUY', INVXH_total_QTY, -INVXH_total_QTY)) OVER (ORDER BY INVXh_DATE) BALQTY,
20 row_number() over (order by INVXH_date) seq_no
21 from invs_TXN_head b
22 where INVXH_BROK_code = P_brok_code
23 aND INVXH_Securit_CODE = p_SECURIT_code
24 and INVXH_date < to_CHAR(p_DATE,'dd/mm/yyyy'))
25 model
26 dimension by (seq_no)
27 measures (invxh_DATE
28 , INVXh_code
29 , INVXH_no
30 , INVXH_total_qty
31 , balqty
32 , INVXH_net_AMOUNT_Scy
33 , 0 balamt
34 , 0 balamt2
35 , 0 avgprice
36 , 0 cost)
37 rules (
38 balamt[seq_no is any] = nvl(balamt[cv() - 1], 0) +
39 decode(INVXH_code[cv()], 'BUY', INVXH_net_AMOUNT_Scy[cv()] , -(balamt[cv() -1] /
40 balqty[cv() -1] * invxh_TOTAL_qty[cv()]) ) ,
41 cost[seq_no is any] = decode(INVXH_code[cv()], 'SEL', balamt[cv() -1] /
42 balqty[cv() -1] * invxh_TOTAL_qty[cv()], 0),
43 avgprice[seq_no is any] = decode(INVXH_code[cv()], 'BUY', balamt[cv()] /
44 balqty[cv()] , avgprice[cv() - 1])
45 )
46 ) t
47 order by seq_no desc
48 ) where rownum = 1
49 RETURN avgprice;
50 END GET_wtavg;
51 /

Warning: Function created with compilation errors.

SQL> show error
Errors for FUNCTION GET_WTAVG:

LINE/COL ERROR
-------- -----------------------------------------------------------------
*4/1 PL/SQL: SQL Statement ignored*
*48/21 PL/SQL: ORA-00933: SQL command not properly ended*
SQL>

it works well, if i dont put it in a Stored function;

select avgprice
from (
select t.*
from (
select seq_no
, invxh_DATE
, INVXH_code
, invxh_No
, invxH_total_qty
, INVXH_net_AMOUNT_Scy INVXH_net_AMOUNT_Scy
, balqty
, ROUND(balamt, 3) balamt
, ROUND(avgprice, 10) avgprice
, ROUND(cost, 3) cost
from (select b.*,
sum(decode(invxh_code, 'BUY', INVXH_total_QTY, -INVXH_total_QTY)) OVER (ORDER BY INVXh_DATE) BALQTY,
row_number() over (order by INVXH_date) seq_no
from invs_TXN_head b
where INVXH_BROK_code = 'B00001'
aND INVXH_Securit_CODE = 'S00001'
and INVXH_date < to_DATE('25/02/2008','dd/mm/yyyy'))
model
dimension by (seq_no)
measures (invxh_DATE
, INVXh_code
, INVXH_no
, INVXH_total_qty
, balqty
, INVXH_net_AMOUNT_Scy
, 0 balamt
, 0 balamt2
, 0 avgprice
, 0 cost)
rules (
balamt[seq_no is any] = nvl(balamt[cv() - 1], 0) +
decode(INVXH_code[cv()], 'BUY', INVXH_net_AMOUNT_Scy[cv()] , -(balamt[cv() -1] /
balqty[cv() -1] * invxh_TOTAL_qty[cv()]) ) ,
cost[seq_no is any] = decode(INVXH_code[cv()], 'SEL', balamt[cv() -1] /
balqty[cv() -1] * invxh_TOTAL_qty[cv()], 0),
avgprice[seq_no is any] = decode(INVXH_code[cv()], 'BUY', balamt[cv()] /
balqty[cv()] , avgprice[cv() - 1])
)
) t
order by seq_no desc
) where rownum = 1
/
AVGPRICE
----------------
2.1761218756

THE RAW DATA Is;
1 select invxh_DATE
2 , INVXH_code
3 , invxh_No
4 , invxH_total_qty
5 , INVXH_net_AMOUNT_Scy
6 from invS_txn_HEAD
7 where INVXH_BROK_code = 'B00001'
8 aND INVXH_Securit_CODE = 'S00001'
9* and INVXH_date < to_DATE('25/02/2008','dd/mm/yyyy')
SQL> /

INVXH_DAT INVXH_ INVXH_NO INVXH_TOTAL_QTY INVXH_NET_AMOUNT_SCY
--------- ------ ------------- --------------- --------------------
03-JAN-08 BUY 1.000 75000.000 166593.158
06-JAN-08 BUY 2.000 35000.000 80717.835
07-JAN-08 BUY 3.000 50000.000 108432.000
20-JAN-08 BUY 4.000 50000.000 105316.613
22-JAN-08 BUY 5.000 15000.000 28567.816
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 27 2008
Added on Aug 29 2008
22 comments
443 views