示例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功能