Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Masalah dalam pembuatan tabel dinamis

Perbaikan paling sederhana adalah menghapus tanda koma di akhir:

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

Sepertinya prosedurnya bisa disederhanakan menjadi:

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;

Ini memberikan output seperti ini:

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

Apakah Anda berencana untuk menangani nilai default, pengidentifikasi yang dihasilkan, kolom virtual, atau urutan kolom tertentu?

Anda juga yakin bahwa rc1.is_null = 'Y' berarti kolom itu wajib? Sepertinya sebaliknya.



  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 RAC dan urutannya

  2. urutan oracle hibernasi menghasilkan celah besar

  3. java.lang.ArrayIndexOutOfBoundsException:untuk koneksi jdbc

  4. Bagaimana saya bisa menggabungkan beberapa baris ke dalam daftar yang dipisahkan koma di Oracle?

  5. Apakah Oracle memiliki konsep indeks yang difilter?