【发布时间】:2017-08-31 12:28:49
【问题描述】:
我是 PL/SQL 的初学者。我需要编写一个包含以下详细信息的函数:
创建一个名为“find_transaction_type”的函数,它将接受 transaction_type_id 作为输入。基于此输入,函数必须返回 varchar 类型的事务类型名称。
函数名:find_transaction_type,
输入参数:transaction_type_id in int
设计规则:
1)如果交易类型id(即transaction_type_id)作为输入传递,与交易表中的id匹配,则返回给定transaction_type_id的类型。
2)如果作为输入传递的事务类型id与事务表中的id不匹配,则抛出'no_data_found'异常并显示为'No such Type'的文本
注意:使用变量而不是 'dbms_output.put_line' 来打印异常 即: umpire_name := '没有这样的裁判';
我的解决方案是:
create or replace function find_transaction_type(transaction_type_id in integer) return varchar is
transaction_type_name varchar(255);
type_id integer;
error_msg varchar(255);
begin
error_msg := 'No such Type';
select id
into type_id
from transaction_type;
if type_id = transaction_type_id
then
select type
into transaction_type_name
from transaction_type
where id = transaction_type_id;
return(transaction_type_name);
else
raise no_data_found;
end if;
exception
when no_data_found then
raise_application_error(-10403, error_msg);
end;
/
我的代码有什么问题?
【问题讨论】:
-
除了没有任何缩进使其可读之外? :-) 好吧,您的第一个
select没有 where 子句,因此将返回来自transaction_type的所有行,而不仅仅是您想要的行。