| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: PL/SQL Query problems.
Maybe try this:
EXECUTE IMMEDIATE 'SELECT COUNT(1) INTO USER_COUNT FROM '||TB_NAME||'
WHERE ...';
HTH
Ashish
Craig & Co. wrote:
> Hi,
>
> Tried the following:
> EXECUTE IMMEDIATE 'SELECT count(1)
> INTO User_Count
> FROM :tab_name
> WHERE TLAST_CHANGED_UID = ''CRB'''
> USING 'TB_NAME';
>
> And it compiles, but when I execute it I get
> ERROR at line 1:
> ORA-00905: missing keyword
> ORA-06512: at "CHANGE_CRB", line 21
> ORA-06512: at line 1
>
> Something to do with the BIND variable?
>
> Cheers
> Craig.
>
> "Ashish" <srivastava.ashish_at_gmail.com> wrote in message
> news:ZnvXd.34$iu2.20_at_news.oracle.com...
>
>
>>Hi, >> >>TB_NAME is a variable. You cannot use it directly in a DML statement. In >>your case, try using Dynamic PL/SQL >>i.e. >>EXECUTE IMMEDIATE 'SELECT count(1) into user_count from :tab_name where >>.... ' USING 'TB_NAME'; >> >> >>HTH >>Ashish >> >>Craig & Co. wrote: >> >> >>>Hi, >>> >>>Trying to get all the tables with the field 'TLAST_CHANGED_UID, then
>>>that list
>>>get the number of records in each table where the field above equals a
>>>specific user.
>>>
>>>I have the following:
>>>CREATE OR REPLACE PROCEDURE CHANGE_CRB IS
>>>BEGIN
>>> DECLARE
>>> CURSOR C1_Table IS
>>> SELECT TABLE_NAME
>>> FROM USER_TAB_COLUMNS
>>> WHERE COLUMN_NAME = 'TLAST_CHANGED_UID';
>>> User_Count NUMBER(10);
>>> TABLE_REC C1_Table%ROWTYPE;
>>> TB_NAME VARCHAR2(30);
>>>BEGIN
>>> OPEN C1_Table;
>>> <<master>>
>>> LOOP
>>> FETCH C1_Table INTO TABLE_REC;
>>> EXIT master WHEN C1_Table%NOTFOUND;
>>> TB_NAME := TABLE_REC.TABLE_NAME;
>>> dbms_output.put_line ('TABLE '||TB_NAME);
>>> <<inner>>
>>> LOOP
>>> SELECT count(1)
>>> INTO User_Count
>>> FROM TB_NAME
>>> WHERE tlast_changed_uid = 'CRB';
>>> if ( User_Count > 0 ) then
>>> dbms_output.put_line ('TABLE '||TB_NAME||'- Count:
>>>'||User_Count);
>>> end if;
>>> END LOOP inner;
>>> END LOOP;
>>> CLOSE C1_Table;
>>>END;
>>>END;
>>>/
>>>
>>>When trying to compile the procedure I get the following error.
>>>21/10 PL/SQL: SQL Statement ignored
>>>23/15 PLS-00201: identifier 'TB_NAME' must be declared
>>>
>>>If I -- the <<inner>> LOOP out, the procedure compiles and executes with
>>>a problem. >>>As soon as I attempt to use the TB_NAME variable I get problems. >>>I am guessing that because TB_NAME is not a real table, that is
>>>the error, but how >>>do I use the list that I get from the CURSOR to test for the number of >>>records a user has updated? >>> >>>Craig. >>> >>> >>
![]() |
![]() |