missing keyword
776126Jul 24 2011 — edited Jul 24 2011Hi 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