2017-03-09 15 views
0

oracleを初めて使用しました。私は、HPDMAツールを使用してOracleスクリプトを実行しようとしています.HPDMAツールは、テーブルスキーマを作成するテーブル作成スクリプトを呼び出します。私は、スクリプトのいずれかで、次のエラーを取得しています:ORA-00900:無効なSQL文Oracleエラー

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

ライン46は、NOCACHE文を持っている:

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

以下は、テーブル作成スクリプトです。別のデータベースでスクリプトを実行したときに、このエラーは発生しませんでした。

ご協力いただければ幸いです。ありがとうございました。

答えて

3

エラーは、スクリプト全体ではなく、PL/SQLブロック内の行を参照している行46に対して報告されます。 PL/SQLブロックのライン46は、次のとおりです。

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

PROMPT is a SQL*Plus client command.エラーが言うようにそれは、SQLコマンドではありません。 execute immediateがあなたに与えるSQL文脈では有効ではありません。サーバ上で実行されており、クライアントとは関係ありません。 (たとえば、スケジュールされたジョブを介してブロックを実行することはできますが、クライアントの操作は一切ありません)。

この行を削除する必要があります。

+0

あなたの答えをありがとう。しかし、私は別のデータベースにデプロイしたときにこのエラーに直面しませんでした。この特定のインスタンスで失敗する理由は何でしょうか? –

+0

そして、エラーを出した行をどうやって決めましたか?後で私のために役立つように共有してください。ありがとう! –

+0

promptコマンドは、どのインスタンスでも失敗します。前にその線があったと確信していますか?または、エラーが気付かれなかった可能性があります。実行方法によっては、.loginや.gloginの設定スクリプトがあります。これは、 'sqlerrorがいつも異なって設定されます。例えば、スクリプトの全体的な成功/失敗に影響するかもしれません。多分古いログをチェックする価値がある。この場合、テーブルが作成されましたが、主キーが追加されていない可能性があります。 –