创建具有多个嵌套开始的存储过程

pro*_*ing 1 sql stored-procedures oracle-sqldeveloper

如何在一个过程中放置​​多个“开始”以删除和创建表?

我的尝试——

CREATE PROCEDURE procCreateCarTable
IS
    BEGIN

        BEGIN 
            EXECUTE IMMEDIATE 'DROP TABLE CARS';
        END;

        COMMIT;

        BEGIN
            EXECUTE IMMEDIATE 'CREATE TABLE CARS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE VARCHAR2(10))';
            COMMIT;
        END;
    END; 
Run Code Online (Sandbox Code Playgroud)

一一执行工作,但在创建此过程时,我收到以下错误 -

ORA-06550: line 5, column 1:
PLS-00103: Encountered the symbol "END" 
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)

这是我在下面的评论中提到的我开始工作的 SQL 过程 -

CREATE PROCEDURE procCreateCarTable
IS
BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE CARS';
  EXCEPTION WHEN OTHERS THEN NULL;
  EXECUTE IMMEDIATE 'CREATE TABLE CARS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE  
  VARCHAR2(10))';
  COMMIT;  
END; 
Run Code Online (Sandbox Code Playgroud)

我添加了一个 EXCEPTION 以防表 CARS 不存在,但现在我下面的最新程序失败了 -

CREATE PROCEDURE procCreateCarTable
IS
BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE CARS';
  EXCEPTION WHEN OTHERS THEN NULL;
  EXECUTE IMMEDIATE 'CREATE TABLE CARS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE      
  VARCHAR2(10))';
  EXECUTE IMMEDIATE 'DROP TABLE TRUCKS';
  EXCEPTION WHEN OTHERS THEN NULL;
  EXECUTE IMMEDIATE 'CREATE TABLE TRUCKS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE   
  VARCHAR2(10))';
  COMMIT;
END; 
Run Code Online (Sandbox Code Playgroud)

我能想到的关于为什么我的最新程序失败的唯一原因是因为另一个“例外”。我确实想要另一个在那里,所以过程仍然可以创建 TRUCKS 表。有什么建议?

pro*_*ing 5

通过反复试验,我创建了程序:

CREATE PROCEDURE procCreateCarTable
IS
BEGIN
  BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE CARS';
    EXCEPTION WHEN OTHERS THEN NULL;
    EXECUTE IMMEDIATE 'CREATE TABLE CARS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE    
    VARCHAR2(10))';
  END;
  BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE TRUCKS';
    EXCEPTION WHEN OTHERS THEN NULL;
    EXECUTE IMMEDIATE 'CREATE TABLE TRUCKS (ID VARCHAR2(1), NAME VARCHAR2(10), TITLE 
    VARCHAR2(10))';
  END;
END; 
Run Code Online (Sandbox Code Playgroud)