我正在阅读一本教授 PL/SQL 的书,但与该主题的许多资源一样,它提供了有关其示例的粗略细节。有人可以帮我解决这个问题(逐字逐句)吗?文本没有提供使用代码的示例表。
以下代码创建了一个函数,该函数将根据给定的员工编号返回员工姓名:-
CREATE OR replace FUNCTION Getname (p_empno emp.empno%TYPE)
RETURN VARCHAR
IS
CURSOR empname_cur(
p_empno emp.empno%TYPE) IS
SELECT ename
FROM emp
WHERE empno = p_empno;
r_empname empname_cur%ROWTYPE;
BEGIN
OPEN empname_cur(p_empno);
FETCH empname_cur INTO r_empname;
IF empname_cur%NOTFOUND THEN
r_empname.ename := 'UNKNOWN EMPLOYEE';
END IF;
CLOSE empname_cur;
RETURN r_empname.ename;
END;
首先,上面的函数声明了一个游标来检索员工姓名,然后打开游标,执行一次提取,如果没有找到行,则将名称设置为 UNKNOWN EMPLOYEE,关闭游标并将名称返回给调用程序。
可以从 SQL 语句调用该函数,如下所示:-
SELECT GetName(empno) name
amount
FROM bonus;
那么...电话中的 p_empno 是什么?是表名吗?它是参数的占位符,其类型与列 emno 相同吗?
最让我困惑的是
r_empname empname_cur%ROWTYPE;
它到底在做什么?是什么r_empname
?调用 GetName 时,尾随的“名称”未参数化参数是什么?