错误(5,1):PLS-00103:创建函数时遇到符号“CREATE”错误

Posted

技术标签:

【中文标题】错误(5,1):PLS-00103:创建函数时遇到符号“CREATE”错误【英文标题】:Error(5,1): PLS-00103: Encountered the symbol "CREATE" error while creating function 【发布时间】:2015-03-10 09:47:04 【问题描述】:
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;

【问题讨论】:

你有什么问题? dba.stackexchange.com/questions/37362/… -- 如果要创建临时表,则需要使用动态 SQL。 不要在函数中创建临时表。 Oracle 只有全局临时表,没有像其他 RDBMS 那样的本地临时表。 【参考方案1】:

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

您可以使用集合代替,但这里没有意义,您可以这样做:

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

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

【讨论】:

以上是关于错误(5,1):PLS-00103:创建函数时遇到符号“CREATE”错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:00103 用于 plsql 过程

执行脚本时遇到 PLS-00103 错误

PL/SQL 函数错误 - PLS-00103:遇到符号“IS”

错误(8,1):PLS-00103:遇到符号“SET”

在 PL/SQL 中编译包时出错。错误(7,1):PLS-00103:遇到符号“CREATE”

错误 - PLS-00103:遇到符号“SELECT”