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

cara membuat tabel dinamis di oracle dengan nama kolom dinamis dan tipe data dinamis tanpa tampilan atau tipe tabel lainnya

Anda tidak dapat menggunakan titik koma di EXECUTE IMMEDIATE untuk pernyataan tunggal

Berikut kutipan dari dokumentasi :

Hapus titik koma dari 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

Tapi ada masalah lain.

Anda perlu memahami bagaimana variabel substitusi (&variable ) berfungsi

SQL*Plus akan meminta variabel substitusi hanya sekali:tepat sebelum skrip dikompilasi, sebelum menjalankannya. Dan kemudian variabel diganti dalam skrip kata demi kata, setelah itu akan dikompilasi dan dieksekusi.

Misalnya, saat Anda menjalankan skrip, SQL*Plus mengenali bahwa ada dua literal yang tidak diketahui (&colname dan &coldata ), dan akan meminta Anda. Jika Anda memberikan nilai 'age', dan 'number' untuk nilai tersebut, SQL*Plus akan menulis ulang skrip seperti ini:

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;

Jadi jika Anda ingin menetapkan string literal ke variabel, dan Anda ingin mendapatkan string itu dari variabel substitusi, Anda perlu melakukan ini:

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

Dengan asumsi Anda memberikan 'usia' untuk colname SQL*Plus akan dengan senang hati mengonversi ini menjadi:

colname varchar2(30) := 'age';

Jadi, menempatkan variabel substitusi di dalam loop tidak akan membuat SQL*Plus berulang kali menanyakan nilainya .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pembaruan JavaFX TextArea Segera

  2. Ambil data dari Oracle SP Out Param SYS_REFCURSOR di Unix Korn Shell Script

  3. Variabel dalam SQL -> ERROR PLS-00103:Menemukan simbol SELECT

  4. Beberapa sisipan SQL oracle

  5. Hasilkan DDL dengan Oracle Sql Developer untuk memasukkan kunci Asing