Oracle过程的编译错误

时间:2015-06-29 17:35:18

标签: oracle plsql sqlplus

我在脚本中有以下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 个答案:

答案 0 :(得分:4)

您无法在过程声明中指定字符串的大小,因此它应该是:

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

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