2017-08-25 20 views
-1

ストアドプロシージャ(エラーなしでコンパイルされた)を作成しましたが、呼び出すときに "ORA-02216:tablespace name expected"エラー。これについて混乱させることは、このコードを手動で実行するときです。完全に動作します。 そしてここではコードです:プロシージャが呼び出されたときにEXECUTE IMMEDIATE内に変数が割り当てられない

PROCEDURE createIndexPK 
IS 
VAR_TABLESPACEA VARCHAR2(20); 
BEGIN 
SELECT MIN(TABLESPACE_NAME) INTO VAR_TABLESPACEA FROM ALL_INDEXES WHERE TABLE_NAME = 'SOME_TABLE'; 
EXECUTE IMMEDIATE ('CREATE UNIQUE INDEX SOME_TABLE_PK ON SOME_TABLE 
(ID) 
LOGGING 
TABLESPACE '||VAR_TABLESPACEA||' 
PCTFREE 10 
INITRANS 2 
MAXTRANS 255 
STORAGE (
      INITIAL   64K 
      NEXT    1M 
      MINEXTENTS  1 
      MAXEXTENTS  UNLIMITED 
      PCTINCREASE  0 
      BUFFER_POOL  DEFAULT 
     ) 
NOPARALLEL'); 
END; 
+0

エラーは 'TABLE_NAME =「ALL_INDEXES FROM VAR_TABLESPACEA INTO MIN(TABLESPACE_NAME)を選択してあり、このクエリは何も返しているかどうかをチェックしSOME_TABLE''。エラーごとに、このクエリは値を返さないようです。 – XING

+0

私はこれから価値を得ています。それは私がこれを使用している状況の1つに必要な "INDEXES"を返す –

+0

同じこと、何も変わらない –

答えて

0

そのあなたのために働いていない理由はわからないが、その私のために働いて簡単な例を参照してください。私はあなたのselectステートメントの問題を見ていますが、それが価値を返すと言ったように。そして、おそらく次のように試すことができます:

DECLARE 
    VAR_TABLESPACEA VARCHAR2 (20); 
BEGIN 
    SELECT MIN (TABLESPACE_NAME) INTO VAR_TABLESPACEA FROM ALL_INDEXES; 
    --- This is not making sense to check tablespace of the table and then its minimum value 
    -- WHERE TABLE_NAME = 'EMPLOYEE'; 

    EXECUTE IMMEDIATE 
     'CREATE UNIQUE INDEX SOME_TABLE_PK ON EMPLOYEE 
(EMPLOYEE_ID) 
LOGGING 
TABLESPACE ' 
     || VAR_TABLESPACEA 
     || ' 
PCTFREE 10 
INITRANS 2 
MAXTRANS 255 
STORAGE (
      INITIAL   64K 
      NEXT    1M 
      MINEXTENTS  1 
      MAXEXTENTS  UNLIMITED 
      PCTINCREASE  0 
      BUFFER_POOL  DEFAULT 
     ) 
NOPARALLEL'; 
END; 
関連する問題