-2

我想知道我的答案是否正确,请帮助我,并在此先感谢

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; 
4

2 回答 2

1
EXCEPTION 
WHEN OTHERS THEN NULL;

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

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

于 2012-05-09T18:52:27.023 回答
0

既然你的要求说

...接受来自“员工”的“员工 ID”

我宁愿锚定输入参数:

CREATE OR REPLACE FUNCTION DISPLAY_EMPLOYEE_NAME 
(EMP_ID IN Empoyees.Employee_ID%type)  
....
于 2012-05-09T18:30:00.083 回答