示例pl/sql函数 - 阐述?
我正在阅读一本教授PL/SQL的书,但是就像这个主题上的许多资源一样,它提供了有关其示例的粗略细节。有人能帮我解决这个问题吗(从文本中逐字逐句地)?该文本没有提供使用代码的示例表。示例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时,那个尾随的“name”非参数化参数是什么?
它在干什么?什么是r_empname?
PL/SQL允许您根据行,列或游标的类型定义变量的类型。该行定义了一个名为r_empname
的变量,该变量是与empname_cur
游标返回的行的类型相匹配的记录类型(例如像行)。
%ROWTYPE
语法的优点是,如果更改游标的SQL查询,则其余代码仍然是强类型的,并且无需其他更改即可编译。
当调用GetName时,跟随的“name”参数是什么?
SQL查询中额外的name
是该函数返回的值的列的别名。如果您运行该查询,它将显示在列标题中。
我想你在amount
字段之前缺少一个逗号。这大概应该是这样的:
SELECT GetName (empno) name
, amount
FROM bonus;
-
p_empno在通话,是函数参数的名称,这将是 的CURSOR参数
OPEN empname_cur(p_empno);
这句话表示称为empname_cur的游标具有名为的参数p_empno。在此背景下p_empno从功能参数采用它的值:
FUNCTION GetName
(p_empno emp.empno%TYPE)
- r_empname是一个变量的名称,以及empname_cur%ROWTYPE其类型,这意味着可变结构域选自光标 empname_cur行类型采取,在我们的情况下:ename列类型从emp 表。
-
最后一句:
SELECT的GetName(EMPNO)名称 量 FROM奖金;
必须是:
SELECT GetName (empno) name,
amount
FROM bonus;
因此, “名” 是从结果ALIAS从的GetName功能