Oracle
 sql >> база данни >  >> RDS >> Oracle

Проблем при създаването на динамична таблица

Най-простото решение би било да премахнете запетаята в края:

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' значи колоната е задължителна? Изглежда точно обратното.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се намери Oracle jdbc драйвер

  2. Как да използвам различни и сумирани заедно в Oracle?

  3. Име на колона в списък за потребителски изгледи в Oracle

  4. Намерете максималните последователни години за всеки идентификатор в таблица (Oracle SQL)

  5. Преодоляване на ограничението за групови вмъквания през връзка към база данни