日期:2014-05-17 浏览次数:20891 次
// 想将下面的转为mysql的,求各位帮帮忙,非常感谢!!在线等,我先去恶补下SQL的函数知识,希望等会能有好心人的回答~~
create or replace function getFiberStatus(in_stationid in varchar2, -- 局站标识
in_markid in varchar2, -- 地标标识
in_segmentid in varchar2, -- 光缆段标识
in_fiberid in varchar2) -- 光纤标识
return integer is
v_count integer := 0;
begin
-- 是否被光纤连接占用
select count(*)
into v_count
from fams_fiberconnection
where decode(stationid, in_stationid, 1, 0) = 1
and decode(markid, in_markid, 1, 0) = 1
and ((asegmentid = in_segmentid and afiberid = in_fiberid) or
(zsegmentid = in_segmentid and zfiberid = in_fiberid));
if v_count > 0 then
return 1;
end if;
-- 是否被分光器占用
select count(*)
into v_count
from fams_splitter
where decode(stationid, in_stationid, 1, 0) = 1
and decode(markid, in_markid, 1, 0) = 1
and segmentid = in_segmentid
and fiberid = in_fiberid;
if v_count > 0 then
return 1;
end if;
-- 是否被分光器连接占用
select count(*)
into v_count
from fams_splitter s, fams_splitterconnection sc
where decode(stationid, in_stationid, 1, 0) = 1
and decode(markid, in_markid, 1, 0) = 1
and s.splitterid = sc.splitterid
and sc.segmentid = in_segmentid
and sc.fiberid = in_fiberid;
if v_count > 0 then
return 1;
end if;
-- 是否被光开关连接占用
select count(*)
into v_count
from fams_rtu r, fams_oswconnection oc
where r.stationid = in_stationid
and r.rtuid = oc.rtuid
and oc.segmentid = in_segmentid
and oc.fiberid = in_fiberid;
if v_count > 0 then
return 1;
end if;
-- 其它需要补充,否则未被占用状态
return 0;
end getFiberStatus;
where decode(stationid, in_stationid, 1, 0) = 1 --上面的意思就是下面的意思,怎么搞了这么复杂(就是stationid值为in_stationid的值是成立,否则不成立) where stationid = in_stationid
------解决方案--------------------
-- 我也顺便学习下,下面是百度后的结果,不知道对不对..
CREATE FUNCTION getFiberStatus(in_stationid VARCHAR(10), -- 局站标识
in_markid VARCHAR(10), -- 地标标识
in_segmentid VARCHAR(10), -- 光缆段标识
in_fiberid VARCHAR(10)) -- 光纤标识
RETURNS INTEGER
DETERMINISTIC
CONTAINS SQL
BEGIN
-- 初始化
DECLARE v_count INTEGER DEFAULT 0;
-- 是否被光纤连接占用
SELECT COUNT(*)
INTO v_count
FROM fams_fiberconnection
WHERE stationid = in_stationid
AND markid = in_markid
AND ((asegmentid = in_segmentid AND afiberid = in_fiberid) OR
(zsegmentid = in_segmentid AND zfiberid = in_fiberid));
IF v_count > 0 THEN
RETURN 1;
END IF;
-- 是否被分光器占用
SELECT COUNT(*)
INTO v_count
FROM fams_splitter
WHERE stationid = in_stationid
AND markid = in_markid
AND segmentid = in_segmentid
AND fiberid = in_fiberid;
IF v_count > 0 THEN
RETURN 1;
END IF;
-- 是否被分光器连接占用
SELECT COUNT(*)
INTO v_count
FROM fams_splitter s, fams_splitterconnection sc
WHERE stationid = in_stationid
AND markid = in_markid
AND s.splitterid = sc.splitterid
AND sc.segmentid = in_segmentid
AND sc.fiberid = in_fiberid;
IF v_count > 0 THEN
RETURN 1;
END IF;
-- 是否被光开关连接占用
SELECT COUNT(*)
INTO v_count
FROM fams_rtu r, fams_oswconnection oc
WHERE r.stationid = in_stationid
AND r.rtuid = oc.rtuid
AND oc.segmentid = in_segmentid
AND oc.fiberid = in_fiberid;
IF v_count > 0 THEN
RETURN 1;
END IF;
-- 其它需要补充,否则未被占用状态
RETURN 0;
END;