繁体   English   中英

PL / SQL函数返回varchar2 / numbers

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM