2012-05-09 29 views
0

可能重复:
Homework on PL/SQL FUNCTIONS
plsql functionsPL/SQL函数

功能:

  1. 功能Display_Employee_Name_In_Uppercase接受来自表Employee_ID并返回冷杉st和大写的雇员的姓氏。
  2. 写一个小的PL/SQL程序,以显示其Employee_IDs是107,200和205

这是我做了什么我不知道如何去完成它 可以帮助雇员的名字?

CREATE OR REPLACE FUNCTION disp (emp_id in varchar20) return emp_name 
select into emp_name 
fname||lname 
from employees 
where employee_id=emp_id 
END disp ; 

回答

1

事情是这样的......

CREATE OR REPLACE 
FUNCTION Fn_Display(p_empId IN VARCHAR2) 
RETURN VARCHAR2 

IS 

empName VARCHAR2(100);  

BEGIN 

BEGIN 
    SELECT UPPER(first_name || ' ' || last_name) 
    INTO empName 
    FROM Employees 
    WHERE employee_id = p_empId; 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     RAISE NO_DATA_FOUND     
END; 


RETURN empName; 

END Fn_Display; 

你可以调用这个函数,无论你想。这里是一个示例...

DECLARE 

    empId VARCHAR2(100); 
    empName VARCHAR2(100); 

    BEGIN 

    empId := &ENTER_EMPLOYEE_ID; 
    empName := Fn_Display(empId); 

    DBMS_OUTPUT.PUT_LINE('Employee Name: '||empName); 

    END; 
+3

你的错误处理较差。它比根本没有异常处理程序更糟糕。该函数应该引发异常*。否则任何故障都会被抑制。如果客户端应用程序不支持DBMS_OUTPUT或者它被禁用,那么在发生错误时用户将不会得到任何反馈。 – APC

+0

@APC非常感谢。作为PL/SQL的初学者,我非常感谢您的意见。我编辑了代码以删除您指出的错误。 – knurdy

+0

更好地将您的参数命名为employee_id,与列名称相同,然后在具有函数名称的查询中对引用进行限定。例如。 “WHERE employee_id = fn_display.employee_id” –

0

你可以试试这个代码,也许这一个对你的作品:

CREATE OR REPLACE FUNCTION disp (emp_id in varchar2) return varchar2 IS 
emp_name varchar2(256); 
BEGIN 
    select UPPER(fname || ' ' || lname) 
    into emp_name 
    from employees 
    where employee_id = emp_id; 
    return emp_name; 
END disp; 
+0

谢谢!这非常有帮助 – user1348163