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

cách tạo bảng động trong oracle với tên cột động và kiểu dữ liệu động mà không có bất kỳ dạng xem nào hoặc bất kỳ loại bảng nào khác

Bạn không thể sử dụng dấu chấm phẩy trong EXECUTE IMMEDIATE cho các câu lệnh đơn

Đây là trích dẫn từ tài liệu :

Xóa dấu chấm phẩy khỏi EXECUTE IMMEDIATE .

execute immediate 'create table smap1(nam varchar2(10));'; -- this is your code
execute immediate 'create table smap1(nam varchar2(10))';  -- correct code, no semicolon at end

Nhưng có một vấn đề khác.

Bạn cần hiểu cách thay thế các biến (&variable ) hoạt động

SQL * Plus sẽ nhắc các biến thay thế chỉ một lần:ngay trước khi biên dịch tập lệnh, trước khi chạy nó. Và sau đó các biến được thay thế nguyên văn trong script, sau đó nó sẽ được biên dịch và thực thi.

Ví dụ:khi bạn chạy tập lệnh của mình, SQL * Plus nhận ra rằng có hai ký tự không xác định (&colname&coldata ), và sẽ nhắc bạn. Nếu bạn cung cấp các giá trị 'tuổi' và 'số' cho chúng, SQL * Plus sẽ viết lại tập lệnh như sau:

declare
    -- omitted to add clarity
begin
    execute immediate 'create table smap1(nam varchar2(10));';
    if(no_of_cols>=2) then
        for i in 2..no_of_cols loop
            colname:=age;
            coldata:=number;
            execute immediate 'alter table smapl add '||colname||' '||coldata;  
        end loop;
    end if;
end;

Vì vậy, nếu bạn muốn gán một chuỗi ký tự cho một biến và bạn muốn lấy chuỗi đó từ một biến thay thế, bạn cần thực hiện điều này:

colname varchar2(30) := '&colname'; -- notice the single quotes

Giả sử bạn đã cung cấp 'tuổi' cho colname SQL * Plus sẽ vui vẻ chuyển đổi điều này thành:

colname varchar2(30) := 'age';

Vì vậy, việc đặt một biến thay thế bên trong vòng lặp sẽ không làm cho SQL * Plus liên tục nhắc bạn về giá trị của nó .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Báo cáo trường hợp với kiểu dữ liệu khác nhau

  2. ROracle - dbWriteTable, cột ngày tháng

  3. 40 câu hỏi bạn phải biết về R12.2

  4. Làm thế nào để cấp quyền tạo đặc quyền phiên?

  5. Cách tham chiếu khóa chính tổng hợp trong SQL