Cách khắc phục đơn giản nhất là bỏ dấu phẩy ở cuối:
dbms_output.put_line(rtrim(lsql,',') || ' )');
Có vẻ như thủ tục có thể được đơn giản hóa thành:
create or replace procedure p1(p_table_nm in varchar2)
is
l_sql long := 'create table ' || p_table_nm || chr(10);
l_colsep varchar2(2) := '( '; -- changes to comma after first item
begin
for rc1 in (
select * from t1
where table_name = p_table_nm
)
loop
l_sql := l_sql || l_colsep || rc1.column_name || ' ' || rc1.datatype ||
case
when rc1.column_width is not null then '(' || rc1.column_width || ')'
end;
if rc1.is_null = 'N' then -- Changed from 'Y' - check requirement
l_sql := l_sql || ' NOT NULL';
end if;
l_sql := l_sql || chr(10);
l_colsep := ', ';
end loop;
dbms_output.put_line(rtrim(l_sql,chr(10)) || ' )');
end;
Điều này cho kết quả như thế này:
create table TEST
( FNAME VARCHAR2(10)
, LNAME VARCHAR2(10) NOT NULL
, STARTDATE DATE NOT NULL )
Bạn có dự định xử lý các giá trị mặc định, số nhận dạng được tạo, cột ảo hoặc bất kỳ thứ tự cột cụ thể nào không?
Ngoài ra, bạn có chắc chắn rằng rc1.is_null = 'Y'
có nghĩa là cột là bắt buộc? Nó trông giống như ngược lại.