| 
		
			| Problem with explicit cursor [message #36899] | Wed, 02 January 2002 08:01  |  
			| 
				
				
					| Paul Messages: 164
 Registered: April 1999
 | Senior Member |  |  |  
	| Can some one tell me why I am getting this error when I compile this procedure.  Thank you in advance. 
 SQLWKS> create or replace procedure translate_code
 2> (p_column_name varchar2, p_table_name varchar2,
 3>  p_code varchar2, p_uncode varchar2) is
 4> v_column_name varchar2(30):=p_column_name;
 5> v_table_name varchar2(30):=p_table_name;
 6> v_code varchar2(30):=p_code;
 7> v_uncode varchar2(30):=p_uncode;
 8> cursor c_table is
 9> select v_column_name from v_table_name;
 10> begin
 11> for c1 in c_table loop
 12> if c1.v_column_name = v_code then
 13>  update v_table_name
 14>  set v_column_name = v_uncode
 15>  where v_column_name = v_code;
 16> end if;
 17> end loop;
 18> commit;
 19> end;
 20> /
 MGR-00072: Warning: PROCEDURE TRANSLATE_CODE created with compilation errors.
 SQLWKS>
 SQLWKS> show errors
 Errors for PROCEDURE TRANSLATE_CODE:
 LINE/COL ERROR
 --------------------------------------------------------------------------------
 9/27     PLS-00201: identifier 'V_TABLE_NAME' must be declared
 9/1      PL/SQL: SQL Statement ignored
 12/4     PLS-00364: loop index variable 'C1' use is invalid
 12/1     PL/SQL: Statement ignored
 
 ----------------------------------------------------------------------
 |  
	|  |  | 
	| 
		
			| Re: Problem with explicit cursor [message #36900 is a reply to message #36899] | Wed, 02 January 2002 08:47  |  
			| 
				
				
					| Todd Barry Messages: 4819
 Registered: August 2001
 | Senior Member |  |  |  
	| Paul, no need here for the cursor, variables, or conditional. One update statement using native dynamic SQL does it: 
 
 create or replace procedure translate_code(
  p_column_name in varchar2,
  p_table_name in varchar2, 
  p_code in varchar2, 
  p_uncode in varchar2)
is
begin
  execute immediate 
    'update ' || p_table_name ||
    '   set ' || p_column_name || ' = :uncode' ||
    ' where ' || p_column_name || ' = :code'
    using p_uncode, p_code;
 commit;
end;
/
 ----------------------------------------------------------------------
 |  
	|  |  |