Oracle 示例pl/sql函数-精化?

Oracle 示例pl/sql函数-精化?,oracle,plsql,Oracle,Plsql,我正在读一本教PL/SQL的书,但和许多有关该主题的参考资料一样,它提供了有关示例的粗略细节。有人能帮我解决这个问题吗?文本没有提供使用代码的示例表 以下代码创建了一个函数,该函数将根据给定的员工编号返回员工姓名:- CREATE OR replace FUNCTION Getname (p_empno emp.empno%TYPE) RETURN VARCHAR IS CURSOR empname_cur( p_empno emp.empno%TYPE) IS SELEC

我正在读一本教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\u empname
?调用GetName时,尾随的“name”未参数化参数是什么

它到底在干什么?你的名字是什么

PL/SQL允许您根据行、列或游标的类型定义变量的类型。该行定义了一个名为
r\u empname
的变量,该变量是一种记录类型(如一行),与
empname\u cur
游标返回的行类型相匹配

%ROWTYPE
语法的优点是,如果更改游标的SQL查询,其余代码仍将是强类型的,并且在不进行其他更改的情况下进行编译

调用GetName时,尾随的“name”未参数化参数是什么

SQL查询中额外的
名称
是函数返回值列的别名。如果运行该查询,它将显示在列标题中

我认为您在
金额
字段前缺少了一个逗号。可能应该是这样的:

SELECT GetName (empno) name
     , amount
FROM bonus;
它到底在干什么?你的名字是什么

PL/SQL允许您根据行、列或游标的类型定义变量的类型。该行定义了一个名为
r\u empname
的变量,该变量是一种记录类型(如一行),与
empname\u cur
游标返回的行类型相匹配

%ROWTYPE
语法的优点是,如果更改游标的SQL查询,其余代码仍将是强类型的,并且在不进行其他更改的情况下进行编译

调用GetName时,尾随的“name”未参数化参数是什么

SQL查询中额外的
名称
是函数返回值列的别名。如果运行该查询,它将显示在列标题中

我认为您在
金额
字段前缺少了一个逗号。可能应该是这样的:

SELECT GetName (empno) name
     , amount
FROM bonus;
  • 调用中的p_empno是函数参数的名称,将 游标参数

    OPEN empname_cur(p_empno);
    
这句话表示名为empname\u cur的光标有一个名为p\u empno的参数。在此上下文中,p_empno从函数参数中获取其值:

FUNCTION GetName
                    (p_empno emp.empno%TYPE)
  • r\u empname是一个变量的名称,empname\u cur%ROWTYPE是它的类型,这意味着变量域取自游标 empname\u cur rowtype,在我们的例子中:ename列类型来自emp 桌子
  • 最后一句:

    选择GetName(empno)名称 数量 从奖金

必须是:

SELECT GetName (empno) name,
amount
FROM bonus;
因此,“name”是来自GetName函数的结果的别名
  • 调用中的p_empno是函数参数的名称,将 游标参数

    OPEN empname_cur(p_empno);
    
  • 这句话表示名为empname\u cur的光标有一个名为p\u empno的参数。在此上下文中,p_empno从函数参数中获取其值:

    FUNCTION GetName
                        (p_empno emp.empno%TYPE)
    
    • r\u empname是一个变量的名称,empname\u cur%ROWTYPE是它的类型,这意味着变量域取自游标 empname\u cur rowtype,在我们的例子中:ename列类型来自emp 桌子
    • 最后一句:

      选择GetName(empno)名称 数量 从奖金

    必须是:

    SELECT GetName (empno) name,
    amount
    FROM bonus;
    
    因此,“name”是来自GetName函数的结果的别名