使用多个嵌套开始创建存储过程

时间:2014-06-04 21:56:13

标签: 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; 

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

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:

以下是我在下面的评论中提到的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; 

我在案例表中添加了一个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; 

我能想到为什么我的最新程序失败的唯一原因是因为另一个'EXCEPTION'。我确实想要另一个,所以程序仍然可以创建TRUCKS表。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

通过反复试验,我终于创建了程序 -

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;