sql >> Databasteknik >  >> RDS >> Oracle

Det går inte att använda DROP TABLE OM FINNS i schema.sql för en Spring Boot-applikation

Du har inte visat din Java-kod, men från stackspårningen ser det ut som att du anropar ScriptUtils executeSqlScript() metod , som använde standardseparatorn för semikolonsats.

Den känner inte igen PL/SQL-blocket som en enda enhet, utan försöker istället köra allt upp till första semikolon som en fristående SQL-sats - vilket inte är giltigt och orsakar felet du ser.

Du kan använda den version av executeSqlScript() som låter dig åsidosätta standarden och använda / istället:

vilket skulle innebära att alla SQL-satser i ditt skript måste använda en / separator istället för semikolon också:

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)
  )
/

...

Som noterats i kommentarerna var ditt ursprungliga blockering inte riktigt rätt ändå; och create behöver inte göras via PL/SQL, även om drop måste vara.

Men den metoden har också en ignoreFailedDrops flagga, som verkar göra precis vad du vill (jag kan dock inte testa det för att kontrollera):

Om du använder den versionen och passerar true för den flaggan behöver du inte PL/SQL-omslaget runt droppen; du kan behålla semikolonseparatorn och återgå till:

DROP TABLE table_a;

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

...

Om ditt schemaskript innehåller någon annan PL/SQL - trigger, paket, etc. - måste du fortfarande byta till att använda snedstreckseparatorn (eller valfri annan avgränsare som du väljer, ett snedstreck är dock traditionellt) för allt.



  1. Visa luckor mellan datum i MySQL

  2. socket.io prestanda en emit per databasrad

  3. Mariadb docker-container Kan inte ansluta till MySQL-server på värd (111 Anslutning nekad) med Python

  4. Hur man får Oracle att skapa tabellsats i SQL*Plus