I think the problem is that I cannot call a for loop parameter while defining a nested for loop. Errors appended.
I'm trying to write a stored procedure to reorganize index tablespaces online. I'm having an issue with using a parameter in a FOR loop. How can I make my FOR loop use a parameter:
create or replace procedure REORGANIZE_MASTER AS
v_stmt varchar2(600);
v_stmt2 varchar2(600);
v_stmt3 varchar2(600);
v_stmt4 varchar2(600);
begin
for i in (SELECT LTRIM(username, 'USR_') CUST_SCHEMA
FROM dba_users
WHERE username LIKE 'USR_S%')
loop
v_stmt:='CREATE BIGFILE TABLESPACE REB_'||i.CUST_SCHEMA;
dbms_output.put_line(v_stmt);
--execute immediate v_stmt;
for i in (SELECT index_name FROM dba_indexes WHERE owner = '||i.CUST_SCHEMA||')
loop
v_stmt2:= 'alter i.index_name rebuild online tablespace REB_'||i.CUST_SCHEMA;
dbms_output.put_line(v_stmt2);
--execute immediate v_stmt2;
end loop;
v_stmt3:='drop tablespace IDX_'||i.CUST_SCHEMA||' including contents and datafiles;';
dbms_output.put_line(v_stmt3);
--execute immediate v_stmt3;
v_stmt4:='alter tablespace REB_'||i.CUST_SCHEMA||' rename to IDX_'||i.CUST_SCHEMA;
dbms_output.put_line(v_stmt4);
--execute immediate v_stmt4;
end loop;
end;
/
show errors
exit
Errors for PROCEDURE REORGANIZE_MASTER:
LINE/COL ERROR
-------- -----------------------------------------------------------------
20/17 PL/SQL: Statement ignored
20/82 PLS-00302: component 'CUST_SCHEMA' must be declared