I'm pasting a proc from a package I am writing below, for some reason PL/SQL won't compile the version that is in the comment block... the other version does compile.
Compile error is:
The offending line selected from USER_SOURCE is:Code:LINE/COL ERROR -------- ----------------------------------------------------------------- 234/41 PLS-00103: Encountered the symbol "(" when expecting one of the following: , from
Here is the proc:Code:TEXT -------------------------------------------------- ROW_NUMBER() OVER (ORDER BY stab_yy ASC) AS rn
Can anyone shed some light for me as to why the query works fine as a direct query in SQL*Plus Worksheet as a straight SQL query, but if I put it in a PL/SQL block I get an error?Code:PROCEDURE sgovmrgn3(p_stab_yy IN scc_gov_mrgn_nsr.stab_yy%TYPE, p_prov_code IN scc_gov_mrgn_nsr.prov_code%TYPE, p_prov_mncpty_code IN scc_gov_mrgn_nsr.prov_mncpty_code%TYPE, p_gov_mrgn_type_code IN scc_gov_mrgn_nsr.gov_mrgn_type_code%TYPE, p_gov_mrgn_code IN scc_gov_mrgn_nsr.gov_mrgn_code%TYPE, p_non_cal_op IN NUMBER, p_gov_mrgn_amt IN OUT scc_cur) IS v_mncpty scc_gov_mrgn_nsr.prov_mncpty_code%TYPE; v_non_cal PLS_INTEGER; BEGIN IF NOT use_mncpty_in_select(p_stab_yy, p_prov_code, p_prov_mncpty_code, p_gov_mrgn_type_code, p_gov_mrgn_code) THEN v_mncpty:=0; ELSE v_mncpty:=p_prov_mncpty_code; END IF; IF p_non_cal_op <> 0 THEN v_non_cal:=0; ELSE v_non_cal:=1; END IF; OPEN p_gov_mrgn_amt FOR -- This works --/* SELECT middle.gov_inv_mrgn_amt FROM (SELECT inner.*, ROWNUM AS rn FROM (SELECT gov_inv_mrgn_amt FROM scc_gov_mrgn_nsr WHERE stab_yy = p_stab_yy AND prov_code = p_prov_code AND prov_mncpty_code = v_mncpty AND gov_mrgn_type_code = p_gov_mrgn_type_code AND gov_mrgn_code = p_gov_mrgn_code ORDER BY stab_yy ASC ) inner ) middle WHERE middle.rn BETWEEN 1 + v_non_cal AND 5 + v_non_cal; --*/ -- this block won't compile... WHY? -- this block will work in SQL*Plus worksheet -- the compile error centres around the -- (ORDER BY stab_yy ASC) subclause -- add double dashes below to enable block /* SELECT inner.gov_inv_mrgn_amt FROM (SELECT gov_inv_mrgn_amt, ROW_NUMBER() OVER (ORDER BY stab_yy ASC) AS rn FROM scc_gov_mrgn_nsr WHERE stab_yy = p_stab_yy AND prov_code = p_prov_code AND prov_mncpty_code = p_prov_mncpty_code AND gov_mrgn_type_code = p_gov_mrgn_type_code AND gov_mrgn_code = p_gov_mrgn_code) inner WHERE inner.rn BETWEEN 1+v_non_cal AND 5+v_non_cal; --*/ END sgovmrgn3;
Thanks in advance for any replies.
Cheers,
Keith.




Reply With Quote