在 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”问题的解决(代码
Oracle PL/SQL如何连接一行和另一行中值的第一个字母