如何解决为什么在尝试获取名称时功能不起作用? PL / SQL
现在我正在缓刑中,我的上司给了我这样的任务。 虽然他知道我不了解PL / sql
此外,此代码需要进行优化。 除了该代码不起作用之外,还需要做些什么来对其进行优化并使其起作用?
很抱歉有一个愚蠢的问题。
目前我正在学习PL / sql,但是我的知识不足以理解这些功能。
没有约束和主键的表。
CREATE TABLE CUSTOMERS(CUSTOMER_ID NUMBER,CUSTOMER_NAME VARCHAR2(255));
CREATE OR REPLACE FUNCTION get_name(customer_id number)
return varchar2
as
result varchar2(50);
BEGIN
select customer_name
into result
from customers c
where c.customers_id = customers_id;
return result;
END;
对不起,我的英语不好。
解决方法
您编写的代码几乎是 确定。您犯了两个错误:
-
如果列名是
CUSTOMER_ID
,则不要将其引用为CUSTOMERS_ID
-
如果列名是
CUSTOMERS_ID
,请不要为函数的参数命名,因为-在WHERE
子句中使用时-Oracle无法区分什么这是怎么回事:where customers_id = customers_id
成为
where 1 = 1
这不是您想要的。
这是一个演示如何执行此操作的示例;看看是否有帮助。
样品表:
SQL> create table customers as select empno customers_id,ename customer_name
2 from emp
3 where deptno = 10;
Table created.
功能;注意已更改参数名称:
SQL> CREATE OR REPLACE FUNCTION get_name(par_customers_id number)
2 return varchar2
3 as
4 result varchar2(50);
5 BEGIN
6 select customer_name
7 into result
8 from customers c
9 where c.customers_id = par_customers_id;
10 return result;
11 END;
12 /
Function created.
测试:
SQL> select customers_id,get_name(customers_id) name
2 from customers;
CUSTOMERS_ID NAME
------------ --------------------
7782 CLARK
7839 KING
7934 MILLER
SQL>
到目前为止很好,不是吗?
如何使用DUAL
表?
SQL> select get_name(7782) from dual;
GET_NAME(7782)
----------------------------------------
CLARK
SQL>
,
您的函数没有异常处理,并且您确定select仅返回单个值。
因为如果没有,那么函数将引发错误,因此该函数将无法正常执行,因为没有异常处理。
在sql developer中执行以下查询,以识别表中有多个记录的客户ID。
select customers_id,count(1)
from customers c
group by customers_id;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。