Oracle 过程的编译错误

Posted

技术标签:

【中文标题】Oracle 过程的编译错误【英文标题】:Compile Error for Oracle Procedure 【发布时间】:2015-06-29 17:35:18 【问题描述】:

我在脚本中有以下 PL/SQL 代码,并尝试在 SQL*Plus 中运行它:

create or replace procedure add_employee 
(fname IN varchar2(20), lname IN varchar2(25), email IN varchar2(25), job IN varchar2(25))
AS
eid INTEGER := 300;
BEGIN
    insert into Employees (employee_id, first_name, last_name, email, hire_date, job_id) 
    values (eid, fname, lname, email, job);
END add_employee;
/

我收到以下错误:

Errors for PROCEDURE ADD_EMPLOYEE:

LINE/COL
---------------------------------------------------------------------------
ERROR
---------------------------------------------------------------------------

1/42
PLS-00103: Encountered the symbol "(" when expecting one of the following:

   := . ) , @ % default character
The symbol ":=" was substituted for "(" to continue.

我不明白问题是什么。我已经编写了其他程序,其中左括号跟在程序名称之后,没有任何问题。

【问题讨论】:

【参考方案1】:

你不能在过程声明中指定字符串的大小,所以应该是:

create or replace procedure add_employee 
(fname IN varchar2, lname IN varchar2, email IN varchar2, job IN varchar2)

让参数名称匹配任何表列(在这种情况下为emailjob)不是一个好主意;为参数添加前缀很常见,例如使用p_emailp_job;但应该始终如一地完成。即使名称不冲突,它通常也可以更容易地遵循代码 - 您知道变量来自哪里以及它的范围是什么。

【讨论】:

以上是关于Oracle 过程的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程编译错误

oracle过程异常编译错误

Oracle 过程的编译错误

警告:已编译但在 oracle 中存在编译错误

限制 Oracle 创建编译错误程序

oracle 创建存储过程部分表编译错误是不是表空间、权限不足?