Plsql PL/SQL函数
可能重复:Plsql PL/SQL函数,plsql,oracle11g,Plsql,Oracle11g,可能重复: 功能: 函数以大写形式显示员工姓名,该函数接受员工表中的员工ID,并以大写形式返回员工的姓名 编写一个小型PL/SQL程序来显示Employee_id分别为107、200和205的员工的姓名 这就是我所做的我不知道如何完成它 你能帮忙吗 CREATE OR REPLACE FUNCTION disp (emp_id in varchar20) return emp_name select into emp_name fname||lname from employees
功能:
Employee_id
分别为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 ;
像这样的
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;
你可以试试这段代码,也许这段代码适合你:
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;
你的错误处理很差。这比根本没有异常处理程序更糟糕。该函数应引发异常。否则,任何故障都将被抑制。如果客户端应用程序不支持DBMS_输出,或者如果它被禁用,用户在发生错误时将不会得到任何反馈。@APC非常感谢。作为PL/SQL的初学者,我非常感谢您的评论。我已编辑代码以删除您指出的错误。最好将您的参数命名为employee_id,与列名相同,然后在查询中使用函数名限定对它的引用。例如,“WHERE employee_id=fn_display.employee_id”这仍然不是一个很好的异常处理。捕获异常,然后再次引发它。返回一个字符串表示emp不存在或引发一个有意义的异常可能是有意义的,即:`raise-application_error(-20001,'emp在DB中不存在'),非常感谢,先生。我感谢你的帮助;)非常感谢。这很有帮助