Oracle过程的编译错误
我在脚本中有以下PL/SQL代码,并尝试在SQL*Plus中运行它:Oracle过程的编译错误,oracle,plsql,sqlplus,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, l
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.
我不明白问题是什么。我还编写了其他过程,其中,左括号紧跟在过程名称之后,没有任何问题 您不能在过程声明中指定字符串的大小,因此它应该是:
create or replace procedure add_employee
(fname IN varchar2, lname IN varchar2, email IN varchar2, job IN varchar2)
让参数名称与任何表列匹配不是一个好主意(在本例中,
email
和job
);在参数前加前缀是常见的,例如使用p_电子邮件
和p_作业
;但应该始终如一地这样做。即使在名称不冲突的情况下,也可以更容易地遵循代码-您知道变量的来源及其作用域。您不能在过程声明中指定字符串的大小,因此它应该是:
create or replace procedure add_employee
(fname IN varchar2, lname IN varchar2, email IN varchar2, job IN varchar2)
让参数名称与任何表列匹配不是一个好主意(在本例中,email
和job
);在参数前加前缀是常见的,例如使用p_电子邮件
和p_作业
;但应该始终如一地这样做。即使名称不冲突,它通常也会使遵循代码变得更容易-您知道变量来自何处以及它的作用域是什么