| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> pl*sql errors...
Hi !!!! everyone...
I'd like to make scription of table script.
When I lost table creation script, I'll make table creation script using
below PL*SQL code.
But I got a problem.
I have executed like this.
SQL>@make_sql
Package created.
Package body dropped.
Package body created.
SQL> exec make_sql.full_table('table_name');
but I have error messages...
Could you explain me what's the problem?
Package created.begin make_sql.full_table('ocsipslh'); end;
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.UTL_FILE", line 82
ORA-06512: at "SYS.UTL_FILE", line 120
ORA-06512: at "TESTDBA.MAKE_SQL", line 91
ORA-06512: at line 1
N.B: When I use DBMS_OUTPUT.PUT_LINE, It works fine.
But I use UTL_FILE.PUT_LINE occurs errors....
ksjune_at_ns.gnuh.co.kr
create or replace package make_sql
as
procedure full_table(intab in varchar2);
end make_sql;
/
drop package body make_sql;
create package body make_sql
as
procedure full_table(intab in varchar2)
is
v_tname user_tables.table_name%TYPE;
v_tablespace_name user_tables.tablespace_name%TYPE;
v_pct_free user_tables.pct_free%TYPE;
v_pct_used user_tables.pct_used%TYPE;
v_ini_trans user_tables.ini_trans%TYPE;
v_initial_extent user_tables.initial_extent%TYPE;
v_next_extent user_tables.next_extent%TYPE;
v_min_extents user_tables.min_extents%TYPE;
v_pct_increase user_tables.pct_increase%TYPE;
v_freelists user_tables.freelists%TYPE;
v_freelist_groups user_tables.freelist_groups%TYPE;
v_fd utl_file.file_type;
cursor c_tname
is
select table_name, tablespace_name,
pct_free, pct_used, ini_trans,
initial_extent, next_extent, min_extents,
pct_increase, freelists, freelist_groups
from user_tables
where table_name like upper(intab)||'%';
procedure c_script(tab in varchar2) is
v_column_name user_tab_columns.column_name%TYPE;
v_data_type user_tab_columns.data_type%TYPE;
v_data_length user_tab_columns.data_length%TYPE;
v_data_precision user_tab_columns.data_precision%TYPE;
v_data_scale user_tab_columns.data_scale%TYPE;
v_nullable user_tab_columns.nullable%TYPE;
v_default_length user_tab_columns.default_length%TYPE;
v_default_length user_tab_columns.default_length%TYPE;
v_data_default user_tab_columns.data_default%TYPE;
v_col varchar2(60);
v_rowcount integer;
v_count integer := 0;
cursor c_cname
is
select column_name, data_type, data_length,
data_precision, data_scale, nullable,
nvl(default_length,0), data_default
from user_tab_columns
where table_name = upper(tab)
order by column_id;
begin
select max(column_id)
into v_rowcount
from user_tab_columns
where table_name = upper(tab);
open c_cname;
loop
v_count := v_count + 1;
fetch c_cname into v_column_name, v_data_type,
v_data_length,
v_data_precision, v_data_scale,
v_nullable,
v_default_length, v_data_default;
exit when c_cname%NOTFOUND;
if v_data_type = 'NUMBER'
then
if v_data_scale = 0
then
v_col := v_column_name||' '||v_data_type||
'('||v_data_precision||')';
else
v_col := v_column_name||' '||v_data_type||'('||
v_data_precision||','||v_data_scale||')';
end if;
else
v_col := v_column_name||' '||v_data_type||
'('||v_data_length||')';
end if;
v_col := rpad(v_col,25,' ');
if v_default_length > 0
then
v_col := v_col||'default '||v_data_default;
end if;
v_col := rpad(v_col, 40, ' ');
if v_nullable = 'N'
then
v_col := v_col||'not null';
end if;
v_col := rpad(v_col,50,' ');
if v_count <> v_rowcount
then
v_col := v_col||',';
end if;
utl_file.put_line(v_fd, v_col);
end loop;
v_fd := utl_file.fopen('./','full_table.sql','W');
open c_tname;
loop
fetch c_tname into v_tname, v_tablespace_name,
v_pct_free, v_pct_used,
v_ini_trans,
v_initial_extent, v_next_extent,
v_min_extents,
v_pct_increase, v_freelists,
v_freelist_groups;
exit when c_tname%NOTFOUND;
utl_file.put_line(v_fd, 'create table '||v_tname);
utl_file.put_line(v_fd, '(');
c_script(v_tname);
utl_file.put_line(v_fd, ')');
v_initial_extent := floor(v_initial_extent/1048576);
v_next_extent := floor(v_next_extent/1048576);
utl_file.put_line(v_fd, 'pctfree '||v_pct_free);
utl_file.put_line(v_fd, 'pctused '||v_pct_used);
utl_file.put_line(v_fd, 'initrans '||v_ini_trans);
utl_file.put_line(v_fd, 'tablespace '||v_tablespace_name);
utl_file.put_line(v_fd, 'storage (');
utl_file.put_line(v_fd, ' initial
'||v_initial_extent);
utl_file.put_line(v_fd, ' next
'||v_next_extent);
utl_file.put_line(v_fd, ' pctincrease
'||v_pct_increase);
utl_file.put_line(v_fd, ' minextents
'||v_min_extents);
utl_file.put_line(v_fd, ' freelists
'||v_freelists);
utl_file.put_line(v_fd, ' freelist groups
'||v_freelist_groups);
utl_file.put_line(v_fd, ' )');
utl_file.put_line(v_fd, ';');
![]() |
![]() |