2017-03-09 1117 views
0

我是oracle新手。我正在尝试使用HPDMA工具运行oracle脚本,后者又调用创建表模式的表创建脚本。我得到的脚本之一以下错误:ORA-00900:无效的SQL语句Oracle错误

Table MODEL 
declare 
* 
ERROR at line 1: 
ORA-00900: invalid SQL statement 
ORA-06512: at line 46 

下面是创建表的脚本:46

SET DEFINE OFF; 
Prompt Table MODEL; 

declare 
    l_count int; 
begin 

    select count(*) 
    into l_count 
    from all_tables 
    where owner = 'PORTAL' 
    and  table_name = 'MODEL'; 

    if l_count = 0 then 
    execute immediate 
     'CREATE TABLE PORTAL.MODEL 
      (
       CONFIG_ID  NUMBER, 
       CONFIG_NAME VARCHAR2(100 BYTE), 
       CONFIG_VALUE VARCHAR2(200 BYTE), 
       MODEL_TYPE VARCHAR2(50 BYTE), 
       CONFIG_TYPE VARCHAR2(100 BYTE), 
       IS_ACTIVE  CHAR(1 BYTE), 
       CREATED_BY VARCHAR2(100 BYTE), 
       CREATED_ON DATE, 
       UPDATED_BY VARCHAR2(80 BYTE), 
       UPDATED_ON DATE, 
       DESCRIPTION VARCHAR2(500 BYTE) 
      ) 

      TABLESPACE PORTAL_DATA 
      PCTUSED 0 
      PCTFREE 10 
      INITRANS 1 
      MAXTRANS 255 
      STORAGE (
         INITIAL   64K 
         NEXT    1M 
         MINEXTENTS  1 
         MAXEXTENTS  UNLIMITED 
         PCTINCREASE  0 
         BUFFER_POOL  DEFAULT 
         ) 
      LOGGING 
      NOCOMPRESS 
      NOCACHE 
      NOPARALLEL 
      MONITORING'; 
      execute immediate 'Prompt Non-Foreign Key Constraints on Table MODEL'; 
      execute immediate 'ALTER TABLE PORTAL.MODEL ADD (
       CONSTRAINT MODEL_CONFIG_ID_PK 
       PRIMARY KEY 
       (CONFIG_ID) 
       ENABLE VALIDATE)'; 


      execute immediate 'GRANT INSERT, SELECT, UPDATE ON PORTAL.MODEL TO user1'; 

      execute immediate 'GRANT INSERT, SELECT, UPDATE ON PORTAL.MODEL TO user2'; 

      execute immediate 'GRANT SELECT ON PORTAL.MODEL TO user3'; 
end if; 

end; 
/

线具有NOCACHE声明。我在其他数据库上运行脚本时没有发生此错误。

任何帮助,将不胜感激。谢谢。

回答

3

错误报告在第46行 - 它指的是PL/SQL块中的那行,而不是整个脚本。 PL/SQL块的第46行是:

execute immediate 'Prompt Non-Foreign Key Constraints on Table MODEL'; 

PROMPT is a SQL*Plus client command.正如错误所述,不是SQL命令。它在SQL上下文中无效,execute immediate为您提供,它在服务器上运行,并且与客户端无关。 (例如,您可以通过计划的作业运行该块,完全没有客户端交互)。

您需要删除该行。

+0

感谢您的回答。但是,当我部署到不同的数据库时,我没有遇到此错误。什么可能是这个特定实例失败的原因? –

+0

你是如何确定给出错误的行?你能否分享一下,以便稍后对我有所帮助。谢谢! –

+0

提示命令将在任何实例上失败。你确定这条线以前存在吗?或者有可能错误没有被发现;根据运行方式的不同,可能会有一个.login或.glogin设置脚本,每当sqlerror设置不同时,就可能会影响整个脚本的成功/失败。值得检查旧的日志。在这种情况下,该表已创建,但推测主键未添加? –