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!

missing keyword

776126Jul 24 2011 — edited Jul 24 2011
Hi friends,
im facing few issues when building dynamic query based on certain condition.
here is my code

CREATE OR REPLACE PROCEDURE SLD_POC(TPMR_IN IN VARCHAR2,
SCRN_STAT_IN IN VARCHAR2,
RTE_ID_IN IN VARCHAR2,
STR_ID_IN IN NUMBER) IS
TYPE T_LOAD_CNT IS REF CURSOR;
LOAD_CNT_CUR T_LOAD_CNT;
A VARCHAR2(32767 CHAR);
LOAD_CNT NUMBER;

BEGIN
A := 'SELECT NVL(COUNT(T.CTNR_I), 0)' || ' INTO A ' ||
'FROM CTNR_RTE_HDR HDR,';
IF SCRN_STAT_IN = '01' THEN
A := A || 'CTNR_RTE_DET_CALC';
ELSE
A := A || 'CTNR_RTE_DET_ACTL';
END IF;

A := A || ' t WHERE HDR.APRO_RTE_I =''' || RTE_ID_IN ||
''' AND HDR.RTE_HDR_I=T.RTE_HDR_I AND T.LOC_I=' || STR_ID_IN;

IF TPMR_IN = '15 MAN' THEN
A := A ||
' AND t.STRG_TMPR_ZONE_C = ''05'' AND t.PRCS_METH_C IN (''R'',''B'') ';
ELSIF TPMR_IN = '15 AUT' THEN
A := A || ' AND t.STRG_TMPR_ZONE_C = ''05'' AND t.PRCS_METH_C = ''A'' ';
ELSIF TPMR_IN = '34 AUT' THEN
A := A || ' AND t.STRG_TMPR_ZONE_C = ''03'' AND t.PRCS_METH_C = ''A'' ';

ELSIF TPMR_IN = '34 MAN' THEN
A := A ||
' AND t.STRG_TMPR_ZONE_C = ''03'' AND t.PRCS_METH_C IN (''R'',''B'')';
A := A || ' AND t.AREA_C<>''WET'' ';
ELSIF TPMR_IN = '34 WET' THEN
A := A ||
' AND t.STRG_TMPR_ZONE_C = ''03'' AND T.PRCS_METH_C IN (''R'',''B'')';
A := A || ' AND t.AREA_C = ''WET''';
ELSIF TPMR_IN = '28 MEAT' THEN
A := A || ' AND t.STRG_TMPR_ZONE_C = ''04'' ';
ELSIF TPMR_IN = '55 MAN' THEN
A := A ||
' AND t.STRG_TMPR_ZONE_C IN(''02'',''01'') AND t.PRCS_METH_C IN(''R'',''B'')';
A := A || ' AND t.AREA_C<>''BANA''';
ELSIF TPMR_IN = '55 BAN' THEN
A := A || ' AND t.STRG_TMPR_ZONE_C = ''02'' AND t.AREA_C = ''BANA''';
END IF;
IF SCRN_STAT_IN = '01' THEN
A := A || ' AND T.CTNR_STAT_C =''01''';
ELSIF SCRN_STAT_IN = '08' THEN
A := A || ' AND T.CTNR_STAT_C =''04''';
ELSIF SCRN_STAT_IN = '06' THEN
A := A || ' AND T.CTNR_STAT_C IN(''06'',''08'')';
ELSIF SCRN_STAT_IN = '07' THEN
A := A || ' AND T.CTNR_STAT_C =''07''';
ELSIF SCRN_STAT_IN = '09' THEN
A := A || ' AND T.CTNR_STAT_C = ''09''';
ELSIF SCRN_STAT_IN = '04' THEN
A := A || ' AND T.CTNR_STAT_C IN (''11'',''12'')';
END IF;
/* DBMS_OUTPUT.PUT_LINE(A);*/
OPEN LOAD_CNT_CUR FOR A;
FETCH LOAD_CNT_CUR
INTO LOAD_CNT;
CLOSE LOAD_CNT_CUR;
DBMS_OUTPUT.PUT_LINE(TPMR_IN || CHR(32) || SCRN_STAT_IN || CHR(32) ||
LOAD_CNT);
END;
when trying to execute this with
begin
-- Call the procedure
sld_poc('55 MAN',
'04',
'5454',
789);
end;
getting "ORA-00905: missing keyword" error.
when trying to display the query with
DBMS_OUTPUT.PUT_LINE(A);
got "ORA-06502 : PL/SQL:numeric or value error: host bind array too small " error
but i diclared variable with varchar2(32767)..but still im getting this error..
Please help me in resolving this issue..
Thanks in advance.

Regards,
jeyanthi
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 21 2011
Added on Jul 24 2011
2 comments
154 views