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. SQLクエリから変数を設定するにはどうすればよいですか?

    2. 文字列SQLサーバーから番号を削除します

    3. Rails-複数の関係にわたってデータを効率的にプルして計算します

    4. エラー:ハッシュできないタイプ:'dict'