关于PL / SQL函数的作业

时间:2012-05-09 18:23:57

标签: sql plsql

我想知道我的答案是否正确,请帮助我,并提前致谢

a)创建一个函数'Display_Employee_Name_In_Uppercase',接受'Empoyees'表中的'Employee_ID',并以大写字母返回员工的名字和姓氏。

CREATE OR REPLACE FUNCTION DISPLAY_EMPLOYEE_NAME
(EMP_ID IN NUMBER) RETURN VARCHAR2
IS
EMPNAME VARCHAR(25);
BEGIN
SELECT FNAME ||' '|| LNAME INTO EMP_NAME FROM EMPLOYEES
WHERE EMPLOYEE_ID = EMP_ID;
RETURN UPPER(EMPNAME);
EXCEPTION 
WHEN OTHERS THEN NULL;
END DISPLAY_EMPLOYEE_NAME;

b)编写一个小型PL / SQL程序,以显示Employee_ID为107,200和205的员工的姓名。

SET SERVEROUTPUT ON;
DECLARE 
EMP_ID VARCHAR2(25);
entEMPNAME VARCHAR2(25);
BEGIN 
EMP_ID :=107,200,205;
EMPNAME :=DISPLAY_EMPLOYEE_NAME(EMP_ID);
DBMS_OUTPUT.PUT_LINE('EMPLOYEE NAME: '||EMPNAME);
END;

因为第一个答案是不正确的,我做了这个代码并且它的工作但它太长了, 可以缩短吗?

抱歉,我没有在新页面发布,我不知道如何发布答案各不相同。

SET SERVEROUTPUT ON;
DECLARE 
    EMP_ID VARCHAR2(25);
    EMP_ID2 VARCHAR2(25);
    EMP_ID3 VARCHAR2(25);
    EMPNAME VARCHAR2(25);
    EMPNAME2 VARCHAR2(25);
    EMPNAME3 VARCHAR2(25);
BEGIN 
    EMP_ID :='107';
    EMP_ID2 :='200';
    EMP_ID3 :='205';
    EMPNAME :=DISPLAY_EMPLOYEE_NAME(EMP_ID);
    EMPNAME2 :=DISPLAY_EMPLOYEE_NAME(EMP_ID2);
    EMPNAME3 :=DISPLAY_EMPLOYEE_NAME(EMP_ID3);
    DBMS_OUTPUT.PUT_LINE('EMPLOYEE NAME: '|| EMPNAME || ' ' || EMPNAME2 ||' ' || EMPNAME3);
END; 

2 个答案:

答案 0 :(得分:1)

EXCEPTION 
WHEN OTHERS THEN NULL;

这几乎总是错误的(当然在这种情况下)。你说你的功能可能完全失败,你不在乎。最好的选择是在某处记录错误,然后重新提升它。如果您不需要记录错误,则应该完全退出错误处理部分,并让错误渗透到调用层。

此外,代码块“b”将不起作用。你不能只是将一个逗号分隔的字符串传递给一个期望一个数字的函数,并期望它神奇地工作(我想,从技术上讲,你可以,但你会感到失望)。最简单的方法是调用该过程三次,每次调用一次。如果你想加倍努力,你可以创建一个user-defined type,它是一个数字集合,然后遍历这些值,每次调用该函数。

答案 1 :(得分:0)

因为您的要求是

...接受'Employees'中的'Employee_ID'

我宁愿锚定输入参数:

CREATE OR REPLACE FUNCTION DISPLAY_EMPLOYEE_NAME 
(EMP_ID IN Empoyees.Employee_ID%type)  
....
相关问题