2014-01-21 33 views
0
create or replace procedure p_inout 
(v_emp_lname in varchar2(25)) 
as 
v_first_name varchar2(20); 
begin 
select first_name into v_first_name 
from employees 
where last_name=v_emp_lname; 
dbms_output.put_line(v_first_name); 
end; 

我得到 錯誤(2,25):PLS-00103:出現符號「(」在需要下列之一時::=),@%默認字符符號「:=」代替「(」繼續程序來輸入姓氏時返回名字

+0

您的問題標題似乎是誤導...請具體 – Arnab

回答

1

參數自變量的類型如varchar2沒有大小屬性​​,所以用「varchar2」替換「varchar2(25)」。

參見Oracle docs參數的使用方法具體如下:

**Parameter Datatypes** 
The datatype of a formal parameter consists of one of the following: 

An unconstrained type name, such as NUMBER or VARCHAR2. 

A type that is constrained using the %TYPE or %ROWTYPE attributes 
+0

很酷的作品。某些員工姓氏相同,因此結果將返回超過1條記錄。我得到這個錯誤ORA-01422:確切獲取返回的行數超過請求的行數 ORA-06512:在「HR.P_INOUT」,第6行 ORA-06512:在行1 01422. 00000 - 「精確獲取返回多於請求的行數「 *原因:精確獲取中指定的數量小於返回的行數。 *操作:重寫查詢或更改請求的行數 如何返回多於1條記錄? – JohnD

+0

請將其作爲另一個問題發佈。這與手頭的問題無關。 – OldProgrammer

1
To fetch more than more record you have to use cursor. The code above needs some modification to fetch more than one record. 

create or replace procedure p_inout 
(v_emp_lname in varchar2) 
as 
v_first_name varchar2(20); 
begin 
for rec in (select first_name 
from employees 
where last_name=v_emp_lname) 
loop 
dbms_output.put_line('First name/s'||' '||rec.first_name); 
end loop; 
end;