Hello, I have a pro*C compilation issue, while using PERCENT_RANK() in-built function. Here are the details : The Pro*C code : Code: int srccct2_insert() { EXEC SQL select * from ( select trad_code, comp_code, file_code, insp_yymm, poly_numb, entr_numb, data_code, caus_date, insd_code, rule_ordr, sex_code, entr_age, resd_numb, entr_name, hire_date, entr_date, work_year, hire_grad, datt_entr, ijry_entr, wkdt_entr, base_saly, expt_amnt, rsrv_rato, rsrv_amnt, PERCENT_RANK() OVER (ORDER BY base_saly) pr FROM SRCCCT2 where trad_code = 'N' AND comp_code = '01' AND insp_yymm = '200403' AND data_code = 'B' AND hire_grad = '2' AND base_saly > 0) where pr > 0.05 and pr < 0.95 and base_saly > 641840; return SUCCESS; } I am compiling it like this : /oracle/product/10.2.0/bin/proc iname=srascs01.pc ireclen=320 oreclen=320 sqlcheck=full userid=retr/rteru maxopencursors=32 dbms=v8 char_map=varchar2 release_cursor=yes include=/oracle/product/10.2.0/precomp/public include=/ihome/hp/../common/include include=/ihome/retr/include include=/usr/include include=/ihome/hp/portlib DEFINE=HPUX I have put the same sql statements in the sql promt and it works fine. But in Pro*C when i compile it using above options, here is the error : ======================================================== Pro*C/C++: Release 10.2.0.4.0 - Production on Thu Feb 25 00:57:42 2010 Copyright (c) 1982, 2007, Oracle. All rights reserved. System default option values taken from: /oracle/product/10.2.0/precomp/admin/pcscfg.cfg Syntax error at line 192, column 28, file srascs01.pc: Error at line 192, column 28 in file srascs01.pc PERCENT_RANK() OVER (ORDER BY base_saly) pr ...........................1 PCC-S-02201, Encountered the symbol "(" when expecting one of the following: , into, from, Error at line 0, column 0 in file srascs01.pc PCC-F-02102, Fatal error while doing C preprocessing *** Error exit code 1 Stop. *** Error exit code 1 Stop. ========================================================= The Pro*C precompiler might not be recognizing the PERCENT_RANK() function for some reason, so it is expecting "into" "from" for the SELECT statement above. Please help me in solving this issue. Thanks a ton in advance. Thanks, -Kumar
The problem here is that the Pro*C SQL parser isn't exactly the same as the RDBMS SQL parser, so it doesn't understand all valid SQL. The solution is to use Dynamic SQL instead and pass the SQL as a string to the database, to be interpreted directly by the database.