当调用precedure时,变量在EXECUTE IMMEDIATE内部不会被赋值

时间:2017-08-25 07:35:17

标签: oracle plsql

所以,我创建了存储过程(编译时没有错误),但是当我调用它时,我得到的只是" ORA-02216:预期的表空间名称"错误。令人困惑的是,当您手动运行此代码时,它可以完美地运行。 这是代码:

As Variant

1 个答案:

答案 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;