创建一个名为“find_port”的函数,它以端口id(即,p_id)作为输入,并返回可以使用该端口进行的传输计数(即,transportation_count)。
函数名:find_port
输入参数:int中的p_id
输出变量:类型数的transportation_count变量
设计规则:
1)如果给定端口id的is_rail为“True”,则将transportation_count显示为“1”。
2)如果给定端口id的is_rail为'False',则将transportation_count显示为'0‘。(注:设计规则仅限于例如。计算is_rail、is_road和is_air的运输计数。)
有关端口详细信息,请参阅架构。在这里输入图像描述
作为解决方案,我使用了以下查询。
CREATE OR REPLACE FUNCTION find_port(p_id in NUMBER)
RETURN varchar2
IS
transportation_count varchar2(10);
BEGIN
SELECT is_rail INTO transportation_count FROM port WHERE port.id=p_id;
IF transportation_count = 'True' THEN
transportation_count := '1';
ELSE
transportation_count := '0';
END IF;
RETURN transportation_count;
END;但这只是给了is_rail的结果。有人能告诉我如何从is_road & is_air得到计数吗?
发布于 2020-06-13 17:09:10
这就是你需要的吗?
declare
is_rail varchar2(10);
is_road varchar2(10);
is_air varchar2(10);
begin
....
SELECT is_rail
, is_road
, is_air
INTO is_rail
, is_road
, is_air
FROM port WHERE port.id=p_id;
...
end;
/发布于 2020-06-14 01:15:44
您不需要plsql,因为它可以在单个sql语句中完成。Sql不包含"IF“语句,但包含"CASE”语句。只需在这三列中的每一列上使用。
with port (id, country,is_rail, is_road, is_air) as
( select 1 id,'A','True','False','True' from dual union all
select 2 id,'A','False','False','True' from dual union all
select 3 id,'A','True','False','False' from dual
)
select id
, case when is_rail = 'True' then 1 else 0 end is_rail
, case when is_road = 'True' then 1 else 0 end is_road
, case when is_air = 'True' then 1 else 0 end is_air
from port
where id = &p_id;发布于 2020-06-28 14:33:56
CREATE OR REPLACE FUNCTION find_port(p_id in port.id%type)
RETURN number
IS
transportation_count number;
port_status varchar2(10);
port_status_a varchar2(10);
port_status_b varchar2(10);
BEGIN
Select is_rail into port_status from port where id=p_id;
Select is_road into port_status_a from port where id=p_id;
Select is_air into port_status_b from port where id=p_id;
IF port_status='True'
THEN
transportation_count:=transportation_count+1;
END IF;
IF port_status_a='True'
THEN
transportation_count:=transportation_count+1;
END IF;
IF port_status_b='True'
THEN
transportation_count:=transportation_count+1;
END IF;
RETURN transportation_count;
END find_port;
/https://stackoverflow.com/questions/62362024
复制相似问题