在 PL/SQL 中连接名字和姓氏的函数

Posted

技术标签:

【中文标题】在 PL/SQL 中连接名字和姓氏的函数【英文标题】:Function to concatenate first name and last name in PL/SQL 【发布时间】:2020-10-21 14:35:29 【问题描述】:

如何编写一个函数来连接员工的名字和姓氏,并将员工 ID 作为输入传递给函数 CONCAT_NAME。我试过的代码是-

set serveroutput on;
    create or replace function concat_name(v_id employee.emp_id%type)
    return varchar2(25)
    is
    begin
    select (first_name || last_name) into concat_name from employee where emp_id = v_id;
    dbms_output.put_line(concat_name);
    end;
    /

预期的输出是 -

CONCAT_NAME(101)
--------------------------------------------------------------------------------
SmithWilliam
SmithWilliam

但是运行上面的错误是-

Warning: Function created with compilation errors.
SELECT CONCAT_NAME(101) FROM EMPLOYEE
       *
ERROR at line 1:
ORA-06575: Package or function CONCAT_NAME is in an invalid state

任何帮助将不胜感激!

【问题讨论】:

运行show errors查看问题详情 【参考方案1】:

嗯,不是那样的。函数存在的一个特定原因是:返回一个值。所以 - return 它,不要 dbms_output.put_line 它。当然,您也应该使用正确的语法。我建议您先阅读文档,然后再阅读代码。

我爱上了 10g 的documentation,因为它的主页很好地分为有用的部分。查看最受欢迎书籍列表,然后阅读

应用程序开发人员指南 - 基础 PL/SQL 用户指南和参考

因为它们涵盖了您当前正在学习的 PL/SQL。我想你确实知道 SQL;如果没有,好吧,先读那本书。此外,既然您知道要阅读什么,请随时查找与您的数据库版本相关的文档。


你的任务:

SQL> create or replace function concat_name(v_id employee.emp_id%type)
  2    return varchar2
  3  is
  4    retval varchar2(25);
  5  begin
  6    select first_name || last_name
  7      into retval
  8      from employee
  9      where emp_id = v_id;
 10
 11    return retval;
 12  end;
 13  /

Function created.

SQL> select concat_name(101) from dual;

CONCAT_NAME(101)
-----------------------------------------------------------------------------
SmithWilliam

SQL>

【讨论】:

非常感谢您提供的解决方案以及学习资料,我一定会通过它。

以上是关于在 PL/SQL 中连接名字和姓氏的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数

PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决(代码

pl/sql函数和过程

Oracle PL/SQL如何连接一行和另一行中值的第一个字母

PL/SQL ORA-01422 SELECT INTO 错误,Oracle 匿名块(NOVA 环境)

在使用 Entity Framework 数据库优先在表上插入行之前,如何从 PL/SQL 执行触发器?