[英]PL / SQL Function to return varchar2 / numbers
我有这个PL / SQL函数接受学生的名字(f_name)。 然后,该功能从名为学生的预制表中显示给定学生的所有信息。 该表包含5列,2个数字类型和3个varchar2类型。 如果在表中找不到该名称,则返回错误消息。 到目前为止我的代码是
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:表达式类型错误
我相信我的初始返回varchar2语句。 如何允许返回接受varchar2类型和数字类型?
RETURN varchar2
您需要返回rowtype ,但是您返回一个标量 。 VARCHAR2
不能保持一行,它只能保存一个字符串值。
将其修改为:
RETURN students%rowtype;
使用标准EMP表演示 :
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:内部错误[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而不是student%rowtype来使用SQL中的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.