sql >> Databáze >  >> RDS >> Oracle

Problém při vytváření dynamické tabulky

Nejjednodušší opravou by bylo odstranit koncovou čárku na konci:

dbms_output.put_line(rtrim(lsql,',') || ' )');

Zdá se, že postup by mohl být zjednodušen na:

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;

Výsledkem je tento výstup:

create table TEST
( FNAME VARCHAR2(10) 
, LNAME VARCHAR2(10) NOT NULL
, STARTDATE DATE NOT NULL )

Plánujete zpracovat výchozí hodnoty, vygenerované identifikátory, virtuální sloupce nebo jakékoli zadané řazení sloupců?

Jste si také jisti, že rc1.is_null = 'Y' znamená, že sloupec je povinný? Vypadá to naopak.



  1. Při hledání rychlého místního úložiště

  2. Pandy - write_frame to sqlite - datetime64[ns]

  3. Vytvořte ROLLING součet za určité časové období v mysql

  4. Automatizace tabulkového modelu zpracování databází Analysis Services (SSAS) na serveru SQL Server