PL/SQL函数到returnvarchar2/numbers
PL / SQL Function to return varchar2 / numbers
我有这个 PL / SQL 函数可以接受学生的名字 (f_name)。然后该函数显示来自预制 table 名为 students 的给定学生的所有信息。 table 包含 5 个列、2 个数字类型和 3 个 varchar2 类型。如果在 table 中找不到该名称,则会 return 编辑一条错误消息。到目前为止我的代码是
CREATE OR REPLACE FUNCTION studentName(
f_name IN VARCHAR2)
RETURN
IS
v_test students%rowtype;
CURSOR c1
IS
SELECT * FROM students WHERE first_name = f_name;
BEGIN
OPEN c1;
FETCH c1 INTO v_test;
IF c1%notfound THEN
v_test := NULL;
END IF;
CLOSE c1;
RETURN v_test;
END;
我不断收到:
PLS-00382: expression is of wrong type
我相信我最初的 return varchar2 声明。如何让 return 同时接受 varchar2 类型和数字类型?
RETURN varchar2
您需要return行类型,但您return正在标量。 VARCHAR2
不能容纳一行,它只能容纳一个字符串值。
修改为:
RETURN students%rowtype;
Demo 使用标准 EMP table:
SQL> CREATE OR REPLACE FUNCTION studentName(
2 f_name IN VARCHAR2)
3 RETURN emp%rowtype
4 IS
5 v_test emp%rowtype;
6 CURSOR c1
7 IS
8 SELECT * FROM emp WHERE ename = f_name;
9 BEGIN
10 OPEN c1;
11 FETCH c1 INTO v_test;
12 IF c1%notfound THEN
13 v_test := NULL;
14 END IF;
15 CLOSE c1;
16 RETURN v_test;
17 END;
18 /
Function created.
SQL> sho err
No errors.
注意 : %ROWTYPE
暗示 PL/SQL 记录类型 和 PL/SQL 类型未知到 SQL。所以你将无法直接在普通 SQL 中使用该函数。您需要使用 SQL 对象类型 。否则你会得到:
ORA-06553: PLS-801: internal error [55018]
在 SQL 中使用它的解决方法:
SQL> create or replace
2 type student_obj_type
3 as object(
4 student_id number,
5 stu_name varchar2(20),
6 dept varchar2(20)
7 )
8 /
Type created.
使用student_obj_type代替students%rowtype来使用[=55=中的函数].
我有这个 PL / SQL 函数可以接受学生的名字 (f_name)。然后该函数显示来自预制 table 名为 students 的给定学生的所有信息。 table 包含 5 个列、2 个数字类型和 3 个 varchar2 类型。如果在 table 中找不到该名称,则会 return 编辑一条错误消息。到目前为止我的代码是
CREATE OR REPLACE FUNCTION studentName(
f_name IN VARCHAR2)
RETURN
IS
v_test students%rowtype;
CURSOR c1
IS
SELECT * FROM students WHERE first_name = f_name;
BEGIN
OPEN c1;
FETCH c1 INTO v_test;
IF c1%notfound THEN
v_test := NULL;
END IF;
CLOSE c1;
RETURN v_test;
END;
我不断收到:
PLS-00382: expression is of wrong type
我相信我最初的 return varchar2 声明。如何让 return 同时接受 varchar2 类型和数字类型?
RETURN varchar2
您需要return行类型,但您return正在标量。 VARCHAR2
不能容纳一行,它只能容纳一个字符串值。
修改为:
RETURN students%rowtype;
Demo 使用标准 EMP table:
SQL> CREATE OR REPLACE FUNCTION studentName(
2 f_name IN VARCHAR2)
3 RETURN emp%rowtype
4 IS
5 v_test emp%rowtype;
6 CURSOR c1
7 IS
8 SELECT * FROM emp WHERE ename = f_name;
9 BEGIN
10 OPEN c1;
11 FETCH c1 INTO v_test;
12 IF c1%notfound THEN
13 v_test := NULL;
14 END IF;
15 CLOSE c1;
16 RETURN v_test;
17 END;
18 /
Function created.
SQL> sho err
No errors.
注意 : %ROWTYPE
暗示 PL/SQL 记录类型 和 PL/SQL 类型未知到 SQL。所以你将无法直接在普通 SQL 中使用该函数。您需要使用 SQL 对象类型 。否则你会得到:
ORA-06553: PLS-801: internal error [55018]
在 SQL 中使用它的解决方法:
SQL> create or replace
2 type student_obj_type
3 as object(
4 student_id number,
5 stu_name varchar2(20),
6 dept varchar2(20)
7 )
8 /
Type created.
使用student_obj_type代替students%rowtype来使用[=55=中的函数].