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

Bagaimana cara mendeklarasikan variabel angka di mana saya dapat menyimpan jumlah tabel di loop saya

Ada tiga hal yang salah dengan SQL dinamis Anda.

  1. EXECUTE IMMEDIATE bukan fungsi:sintaks yang tepat adalah execute immediate '<<query>>' into <<variable>> .
  2. Pernyataan INSERT mengambil klausa VALUES atau SELECT tetapi tidak keduanya. SELECT akan sangat salah dalam kasus ini. Perhatikan juga bahwa ini VALUES bukan VALUE.
  3. COLUMN_NAME adalah literal string dalam SQL dinamis sehingga harus dalam tanda kutip. Tetapi karena pernyataan SQL itu sendiri adalah sebuah string, tanda kutip dalam string dinamis perlu diloloskan sehingga seharusnya `'''||column_name||'''.

Jadi versi yang dikoreksi akan terlihat seperti ini

declare
  Cursor C_TABLE  is 
    select trim(table_name) as table_name
      from all_tables
     where table_name in ('T1', 'T2', 'T3');

  V_ROWNUM number;

begin
    for m in C_TABLE
      loop 
          for i in ( select column_name 
                      from (
                          select c.column_name
                             from all_tab_columns c
                            where c.table_name = m.table_name 
                              and c.owner = 'owner1' 
                            )  
                    )       
     loop
         execute immediate 'select count(*) from ' || m.table_name into  V_ROWNUM;
         execute immediate 'insert into MY_table values ( ''' || i.column_name || ''', ' || V_ROWNUM || ')';

        end loop;
    end loop;
end;
/

SQL dinamis sulit karena mengubah kesalahan kompilasi menjadi kesalahan runtime. Ini adalah praktik yang baik untuk menulis pernyataan terlebih dahulu sebagai SQL statis. Setelah Anda mendapatkan sintaks dasar yang benar, Anda dapat mengubahnya menjadi SQL dinamis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai CLOB masuk/kembali dari plsql (penentu lokasi LOB tidak valid:ORA-22275)

  2. menambahkan bulan ke tanggal SQL

  3. Fungsi oracle add_months berbeda dari Java

  4. Bagaimana cara mengelompokkan berdasarkan bulan termasuk semua bulan?

  5. Klien instan Oracle:ORA-28759:kegagalan membuka file