Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie można użyć DROP TABLE IF EXISTS w schema.sql dla aplikacji Spring Boot

Nie pokazałeś kodu Java, ale ze śladu stosu wygląda na to, że dzwonisz executeSqlScript() ScriptUtil metoda , który używał domyślnego separatora instrukcji w postaci średnika.

Nie rozpoznaje bloku PL/SQL jako pojedynczej jednostki i zamiast tego próbuje uruchomić wszystko aż do pierwszego średnika jako samodzielną instrukcję SQL - która jest nieprawidłowa i powoduje wyświetlany błąd.

Możesz użyć wersja executeSqlScript() który pozwala zastąpić domyślne i użyć / zamiast tego:

co oznaczałoby, że wszystkie instrukcje SQL w twoim skrypcie będą musiały używać / separator zamiast średnika:

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

...

Jak zauważono w komentarzach, twój oryginalny blok i tak nie był w porządku; i create nie trzeba tego robić przez PL/SQL, nawet jeśli drop musi być.

Ale ta metoda ma również ignoreFailedDrops flaga, która wydaje się robić dokładnie to, czego chcesz (nie mogę jej jednak przetestować, żeby to sprawdzić):

Jeśli używasz tej wersji i przekazujesz true dla tej flagi, nie potrzebujesz otoki PL/SQL wokół kropli; możesz zachować separator średników i powrócić do:

DROP TABLE table_a;

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

...

Jeśli twój skrypt schematu zawiera jakikolwiek inny PL/SQL - wyzwalacz, pakiety itp. - nadal będziesz musiał przełączyć się na używanie separatora ukośnika (lub dowolnego innego wybranego separatora; ukośnik jest jednak tradycyjny) dla wszystkiego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj dane do Excela z tabeli Oracle za pomocą PL SQL

  2. Formularze Oracle 10g nie otwierają się w programie do tworzenia formularzy w systemie Windows7 Professional

  3. Połącz się z Oracle za pomocą SSMA

  4. Pula połączeń Spring JDBC i wyniki InputStream

  5. Likwidacja agenta w EM13c