Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sự cố khi tạo bảng động

Cách khắc phục đơn giản nhất là bỏ dấu phẩy ở cuối:

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

Có vẻ như thủ tục có thể được đơn giản hóa thành:

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;

Điều này cho kết quả như thế này:

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

Bạn có dự định xử lý các giá trị mặc định, số nhận dạng được tạo, cột ảo hoặc bất kỳ thứ tự cột cụ thể nào không?

Ngoài ra, bạn có chắc chắn rằng rc1.is_null = 'Y' có nghĩa là cột là bắt buộc? Nó trông giống như ngược lại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn sau có khả thi với SQL Pivot không?

  2. PL / SQL Cách trả về tất cả các thuộc tính trong ROW

  3. Câu lệnh SQL tham gia Oracle và MS SQL Server

  4. Kích hoạt để hiển thị thông báo bằng PL / SQL

  5. 6 cách chọn hàng trùng lặp trong Oracle