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

Tidak dapat menggunakan DROP TABLE JIKA ADA di schema.sql untuk aplikasi Spring Boot

Anda belum menunjukkan kode Java Anda, tetapi dari pelacakan tumpukan sepertinya Anda memanggil executeSqlScript() ScriptUtil metode , yang menggunakan pemisah pernyataan titik koma default.

Itu tidak mengenali blok PL/SQL sebagai satu unit, dan malah mencoba menjalankan semuanya hingga titik koma pertama sebagai pernyataan SQL mandiri - yang tidak valid dan menyebabkan kesalahan yang Anda lihat.

Anda dapat menggunakan the versi executeSqlScript() yang memungkinkan Anda mengganti default dan menggunakan / sebagai gantinya:

yang berarti semua pernyataan SQL dalam skrip Anda harus menggunakan / pemisah, bukan titik koma juga:

BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE table_a';
  EXCEPTION
  WHEN OTHERS THEN
  IF SQLCODE != -942 THEN
    RAISE;
  END IF;
END;
/

CREATE TABLE table_a
  (
    id               VARCHAR(5) PRIMARY KEY,
    name             VARCHAR(100)
  )
/

...

Seperti yang disebutkan dalam komentar, blok asli Anda tidak sepenuhnya benar; dan create tidak perlu dilakukan melalui PL/SQL, bahkan jika drop perlu.

Tetapi metode itu juga memiliki ignoreFailedDrops flag, yang tampaknya melakukan persis seperti yang Anda inginkan (meskipun saya tidak dapat mengujinya untuk memeriksa):

Jika Anda menggunakan versi itu dan memberikan true untuk flag itu, Anda tidak memerlukan pembungkus PL/SQL di sekitar drop; Anda dapat menyimpan pemisah titik koma dan kembali ke:

DROP TABLE table_a;

CREATE TABLE table_a
(
    id                       VARCHAR(5) PRIMARY KEY,
    name                     VARCHAR(100)
);

...

Jika skrip skema Anda berisi PL/SQL lain - pemicu, paket, dll. - maka Anda masih perlu beralih menggunakan pemisah garis miring (atau pemisah lain pilihan Anda; garis miring adalah tradisional) untuk semuanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan pembaruan Oracle SQL hanya memperbarui nilai jika mereka nol

  2. Catat pesan kesalahan dalam prosedur tersimpan Oracle

  3. ORA-04084:tidak dapat mengubah nilai BARU untuk jenis pemicu ini

  4. DECOMPOSE() Fungsi di Oracle

  5. Oracle SQL:Bagaimana mengembalikan beberapa kolom berbeda