2016-04-26 35 views
1

我有两个字段名称和工资的表客户。我需要一个函数来 取名字作为参数,并返回匹配的工资形式的客户表sql函数从表中取名并从同一表中返回其工资

CREATE TABLE customers 
(
customer_name varchar2(50), 
customer_salary number; 
); 
CREATE FUNCTION customer (c_name IN customers.customer_name%type) 
RETURN number; /*return value type*/ 
IS 
sal customers.customer_salary%type; 
BEGIN /*Begin*/ 
SELECT customer_salary into sal 
FROM customers 
WHERE (c_name = sal); 
RETURN sal; 
END /*End*/ 

我这样做,但我不能找到解决办法!

回答

1

你试图用你想要做的,而不是被比较的客户名称字段中传递的参数c_name在表

CREATE FUNCTION customer (c_name IN customers.customer_name%type) 
RETURN number; /*return value type*/ 
IS 
sal customers.customer_salary%type; 
BEGIN /*Begin*/ 
SELECT customer_salary into sal 
FROM customers 
WHERE (customer_name=c_name); 
RETURN sal; 
END /*End*/ 
0

不幸的是salary..what比较客户名称,你正在尝试做的很可能会在任何一种现实生活中失败,而失败与SQL或其他任何代码或技术相关的东西无关。名称不是唯一的。如果你通过一个像'史密斯'或'詹姆斯史密斯'这样的参数(在英语国家)并且你有十个或一千个同名的客户?该函数会抛出一个错误,并提示有关“返回的行太多”的消息。

如果出于任何原因需要,您可以返回所有具有相同名称的客户的列表(如果需要,可进行表格分类)以及每个客户的工资。你可以在SQL中很容易地做到这一点(不需要函数)。

有趣的业务,客户有工资;我想成为您的业务客户! :-)

相关问题