सबसे आसान उपाय यह होगा कि अंत में पीछे वाले अल्पविराम को हटा दिया जाए:
dbms_output.put_line(rtrim(lsql,',') || ' )');
ऐसा लगता है कि प्रक्रिया को सरल बनाया जा सकता है:
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;
यह इस तरह आउटपुट देता है:
create table TEST
( FNAME VARCHAR2(10)
, LNAME VARCHAR2(10) NOT NULL
, STARTDATE DATE NOT NULL )
क्या आप डिफ़ॉल्ट मान, जेनरेट किए गए पहचानकर्ता, वर्चुअल कॉलम, या किसी निर्दिष्ट कॉलम ऑर्डरिंग को संभालने की योजना बना रहे हैं?
क्या आप भी सुनिश्चित हैं कि rc1.is_null = 'Y'
मतलब कॉलम अनिवार्य है? यह इसके विपरीत दिखता है।