Oracle 示例pl/sql函数-精化?
我正在读一本教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
以下代码创建了一个函数,该函数将根据给定的员工编号返回员工姓名:-
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);
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函数的结果的别名
OPEN empname_cur(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函数的结果的别名