错误(5,1):PLS-00103:遇到符号" CREATE"创建功能时出错

时间:2015-03-10 09:47:05

标签: oracle function plsql

Error(5,1): PLS-00103: 

Encountered the symbol "CREATE" when expecting one of the following:     

( begin case declare exit for goto if loop mod null pragma    raise return select update while with <an identifier>    <a double-quoted delimited-identifier> <a bind variable> <<    continue close current delete fetch lock insert open rollback    savepoint set sql execute commit forall merge pipe purge 

在我写的代码之下。

CREATE OR replace FUNCTION First_three_records
  RETURN NUMBER AS
  BEGIN
    CREATE TEMPORARY TABLE temp_emp ON COMMIT DROP AS
    SELECT *
    FROM   emp
    WHERE  deptno=20;

    INSERT INTO tgt
    SELECT *
    FROM   temp_emp;

  END;

1 个答案:

答案 0 :(得分:2)

Oracle没有本地临时表,除非使用动态SQL,否则无法在PL / SQL块中创建对象;这很少是必要或者是个好主意。您的架构应该以受控方式创建,而不是动态创建。

你可以使用一个集合,但这里没有意义,你可以这样做:

INSERT INTO tgt
SELECT *
FROM   emp
WHERE  deptno=20;

我不确定你为什么要将它包装在一个函数中;您的函数也被声明为返回一个数字,但您没有return语句。