Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Help: Error Invalid Number at line 22

Re: Help: Error Invalid Number at line 22

From: Fred Wilson <faNOWilsonSPAM_at_comcast.net>
Date: Fri, 22 Sep 2006 16:59:54 -0400
Message-ID: <tJCdnZoM95I904nYnZ2dnUVZ_tCdnZ2d@comcast.com>

fitzjarrell_at_cox.net wrote:

> Fred Wilson wrote:
>> DA Morgan wrote:

>>> Fred Wilson wrote:
>>>> If anyone can enlighten me?
>>>>
>>>> The error is reporting for the EXECUTE IMMEDIATE LINE below
>>>>
>>>> I am going to post another message with a error from this same code
>>>> but gives me Error Missing Keyword in line 15.
>>>>
>>>> Thank you.
>>>>
>>>> CURSOR CUR_LOC IS
>>>>
>>>> SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE COLUMN_NAME='EVT_CD';
>>>>
>>>> OLD_EV_CD VARCHAR(20) :='136';
>>>>
>>>> T_NAME VARCHAR(40);
>>>>
>>>> num_of_rec number;
>>>>
>>>> v_IM_EX varchar(2000);
>>>>
>>>>
>>>>
>>>> BEGIN
>>>>
>>>>
>>>>
>>>> DBMS_OUTPUT.ENABLE (200000);
>>>>
>>>> DBMS_OUTPUT.PUT_LINE ('EVENT CODE IS: ' || OLD_EV_CD);
>>>>
>>>> OPEN CUR_LOC;
>>>>
>>>> LOOP
>>>>
>>>> FETCH CUR_LOC INTO T_NAME;
>>>>
>>>>
>>>>
>>>> v_IM_EX := '(SELECT COUNT(*) FROM ' || T_NAME || ' WHERE EVT_CD = '
>>>> || OLD_EV_CD || ')';
>>>>
>>>>
>>>>
>>>> EXIT WHEN CUR_LOC%NOTFOUND;
>>>>
>>>>
>>>>
>>>> DBMS_OUTPUT.PUT_LINE ('+++++++++++++++++++++++ ' || T_NAME);
>>>>
>>>> EXECUTE IMMEDIATE v_IM_EX into NUM_OF_REC;
>>>>
>>>> DBMS_OUTPUT.PUT_LINE ('NUMBER OF RECORDS IN THIS TABLE: ' ||
>>>> NUM_OF_REC);
>>>>
>>>> END LOOP;
>>>>
>>>> CLOSE CUR_LOC;
>>>>
>>>> END;
>>> SQL> ed
>>> Wrote file afiedt.buf
>>>
>>> 1 declare
>>> 2 CURSOR CUR_LOC IS
>>> 3 SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE COLUMN_NAME='EVT_CD';
>>> 4 OLD_EV_CD VARCHAR(20) :='136';
>>> 5 T_NAME VARCHAR(40);
>>> 6 num_of_rec number;
>>> 7 v_IM_EX varchar(2000);
>>> 8 BEGIN
>>> 9 DBMS_OUTPUT.ENABLE (200000);
>>> 10 DBMS_OUTPUT.PUT_LINE ('EVENT CODE IS: ' || OLD_EV_CD);
>>> 11 OPEN CUR_LOC;
>>> 12 LOOP
>>> 13 FETCH CUR_LOC INTO T_NAME;
>>> 14 v_IM_EX := '(SELECT COUNT(*) FROM ' || T_NAME || ' WHERE EVT_CD =
>>> ' || OLD_EV_CD || ')';
>>> 15 EXIT WHEN CUR_LOC%NOTFOUND;
>>> 16 DBMS_OUTPUT.PUT_LINE ('+++++++++++++++++++++++ ' || T_NAME);
>>> 17 EXECUTE IMMEDIATE v_IM_EX into NUM_OF_REC;
>>> 18 DBMS_OUTPUT.PUT_LINE ('NUMBER OF RECORDS IN THIS TABLE: ' ||
>>> NUM_OF_REC);
>>> 19 END LOOP;
>>> 20 CLOSE CUR_LOC;
>>> 21* END;
>>> 22 /
>>> EVENT CODE IS: 136
>>>
>>> PL/SQL procedure successfully completed.
>>>
>>> SQL>
>>>
>>>
>>> What problem?
>>>
>>> What bothers me is that this is an inappropriate use of a cursor
>>> Inappropriate use of a loop
>>> Inappropriate use of native dynamic SQL
>>> And the NDS is not using the USING clause (bind variables)
>>>
>>> Syntactically I don't see the issue.
>> I am not sure what this issue is either but I get the errors as
>> indicated in the subject line. I appreciate your comments. I will have
>> to look up what you are talking about. This is my first crack at
>> teaching myself Oracle stuff. I normally use MS Access.
>>
>> Thanks,
>> Fred
> 
> I, too, am wondering how you're seeing such an error.  Creating a table
> to return more output than Daniel provided I still have no problems
> (syntactically) with your code:
> 
> SQL> create table snarfengarfer
>   2  as select object_name, object_type, 136 evt_cd
>   3  from all_objects;
> 
> Table created.
> 
> SQL>
> SQL> set serveroutput on size 1000000
> SQL>
> SQL> declare
>   2  CURSOR CUR_LOC IS
>   3     SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE
> COLUMN_NAME='EVT_CD';
>   4  OLD_EV_CD VARCHAR(20) :='136';
>   5  T_NAME VARCHAR(40);
>   6  num_of_rec number;
>   7  v_IM_EX varchar(2000);
>   8  BEGIN
>   9  DBMS_OUTPUT.ENABLE (200000);
>  10  DBMS_OUTPUT.PUT_LINE ('EVENT CODE IS: ' || OLD_EV_CD);
>  11  OPEN CUR_LOC;
>  12  LOOP
>  13    FETCH CUR_LOC INTO T_NAME;
>  14    v_IM_EX := '(SELECT COUNT(*) FROM ' || T_NAME || ' WHERE EVT_CD
> = ' || OLD_EV_CD || ')';
>  15    EXIT WHEN CUR_LOC%NOTFOUND;
>  16    DBMS_OUTPUT.PUT_LINE ('+++++++++++++++++++++++  ' || T_NAME);
>  17    EXECUTE IMMEDIATE v_IM_EX into NUM_OF_REC;
>  18    DBMS_OUTPUT.PUT_LINE ('NUMBER OF RECORDS IN THIS TABLE: ' ||
> NUM_OF_REC);
>  19  END LOOP;
>  20  CLOSE CUR_LOC;
>  21  END;
>  22  /
> EVENT CODE IS: 136
> +++++++++++++++++++++++  SNARFENGARFER
> NUMBER OF RECORDS IN THIS TABLE: 38332
> 
> PL/SQL procedure successfully completed.
> 
> SQL>
> 
> Maybe it's in the water ...
> 
> 
> David Fitzjarrell
> 

This is actually part of a stored procedure. Received on Fri Sep 22 2006 - 15:59:54 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US