sql >> Database teknologi >  >> RDS >> Oracle

Kan ikke bruge DROP TABLE HVIS FINNES i schema.sql til en Spring Boot-applikation

Du har ikke vist din Java-kode, men ud fra stak-sporingen ser det ud til, at du kalder ScriptUtils executeSqlScript() metode , som brugte standard semikolon-sætningsseparator.

Den genkender ikke PL/SQL-blokken som en enkelt enhed, og forsøger i stedet at køre alt op til det første semikolon som en selvstændig SQL-sætning - hvilket ikke er gyldigt og forårsager den fejl, du ser.

Du kan bruge den version af executeSqlScript() der lader dig tilsidesætte standarden og bruge / i stedet:

hvilket ville betyde, at alle SQL-sætninger i dit script skal bruge en / separator i stedet for et semikolon også:

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 bemærket i kommentarerne var din oprindelige blokering alligevel ikke helt korrekt; og create behøver ikke at ske gennem PL/SQL, selvom drop skal være.

Men den metode har også en ignoreFailedDrops flag, som ser ud til at gøre præcis, hvad du vil (jeg kan dog ikke teste det for at tjekke):

Hvis du bruger den version og passerer true for det flag, behøver du ikke PL/SQL-indpakningen omkring dråben; du kan beholde semikolon-separatoren og vende tilbage til:

DROP TABLE table_a;

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

...

Hvis dit skemascript indeholder en anden PL/SQL - trigger, pakker osv. - så skal du stadig skifte til at bruge skråstreg-separatoren (eller en hvilken som helst anden separator efter eget valg; en skråstreg er dog traditionel) til alt.



  1. Formater et tal som en procentdel i Oracle

  2. Hvordan finder man alle relationerne mellem alle mysql-tabeller?

  3. TSQL vælg i Temp-tabellen fra dynamisk sql

  4. MySQL lagret procedure indsæt flere rækker fra listen