Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Stange error when using dbms_metadata.get_ddl in PL/SQL procedure

qwe11126Mar 4 2010 — edited Mar 4 2010
Basic info:

Oracle 10.2.0.4.0 on linux.

I'm trying to extract ddl of indexes that I drop and recreate frequently during monthly loads and store it in a table.

This statement works on the command line:

insert into saved_indexes
select index_name,dbms_metadata.get_ddl('INDEX',index_name,owner_name)
from sys.all_indexes
where owner = owner_name
and table_name = table_name;
commit;

The table 'saved_indexes' is a two column table with a varchar2(40) and a CLOB.

When I use the following procedure, I get 'ORA-04044 procedure, function, package, or type is not allowed here -4044' every time.

PROCEDURE SAVE_INDEXES (v_table IN VARCHAR2, v_owner IN VARCHAR2) IS

v_errorcode number(8);
v_errortext varchar2(1000);
v_start_time date;

BEGIN

insert into saved_indexes
select index_name,dbms_metadata.get_ddl('INDEX',index_name,v_owner)
from sys.all_indexes
where owner = v_owner
and table_name = v_table;
commit;

EXCEPTION
WHEN others THEN
v_errorcode := sqlcode;
v_errortext := substr(sqlerrm, 1, 1000);
dbms_output.put_line(v_errortext || ' ' || v_errorcode);

END;

Alternatively I have tried it this way:

PROCEDURE SAVE_INDEXES (v_table IN VARCHAR2, v_owner IN VARCHAR2 ) IS

v_errorcode number(8);
v_errortext varchar2(1000);
v_index_ddl CLOB;

BEGIN

for x in (select index_name
from sys.all_indexes
where owner = v_owner
and table_name = v_table)
loop
select dbms_metadata.get_ddl('INDEX',x.index_name,v_owner) into v_index_ddl from dual;
insert into saved_indexes
values(v_table,v_index_ddl);
end loop;
commit;

EXCEPTION
WHEN others THEN
v_errorcode := sqlcode;
v_errortext := substr(sqlerrm, 1, 1000);
dbms_output.put_line(v_errortext || ' ' || v_errorcode);

END;


Always with the same result. I have poured over the documentation on this and have not found anything. All objects are in the same schema, so there is not an issues with invokers rights, or privileges.

Any suggestions would be helpful...
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 1 2010
Added on Mar 4 2010
2 comments
746 views