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=中的函数].