postgres存儲過程
根據項目需要,用SQL寫了一個postgres的存儲過程,記錄如下。
CREATE OR REPLACE FUNCTION GoodsInquiryCondition ( sCountry VARCHAR, sPort VARCHAR, cClass CHAR, cStatus CHAR, iStartTime INT4, iEndTime INT4 )
RETURNS table(total FLOAT8) AS $BODY$ DECLARE
totoal FLOAT8;
sSql text;
sSql_temp text;
count int4;
BEGIN
sSql := 'SELECT sum( tonnage ) FROM shipping_cargo_transfer_3 t';
IF sCountry = '' AND sPort = '' AND cClass = '' AND cStatus = '' AND iStartTime = 0 AND iEndTime = 0 THEN
RETURN QUERY EXECUTE sSql;
ELSE
sSql := sSql || ' WHERE ';
sSql_temp := '';
IF
sCountry <> '' THEN
sSql_temp := sSql_temp || 'AND t.country =''' || sCountry || '''';
END IF;
IF
sPort <> '' THEN
sSql_temp := sSql_temp || 'AND t.port =''' || sPort || '''';
END IF;
IF
cClass <> '' THEN
sSql_temp := sSql_temp || 'AND t.cargo_type =''' || cClass || '''';
END IF;
IF
cStatus <> '' THEN
sSql_temp := sSql_temp || 'AND t.load_unload =''' || cStatus || '''';
END IF;
IF
iStartTime <> 0 THEN
sSql_temp := sSql_temp || 'AND t.in_time >= ' || iStartTime;
END IF;
IF
iEndTime <> 0 THEN
sSql_temp := sSql_temp || 'AND t.out_time <=' || iEndTime;
END IF;
SELECT
length( sSql_temp ) INTO count;
SELECT
substring( sSql_temp FROM 5 FOR count ) INTO sSql_temp;
sSql := sSql || sSql_temp;
RETURN QUERY EXECUTE sSql;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
該存儲過程主要完成多個參數的條件查詢操作,比較簡單,但自己之前使用存儲過程的機會比較少,覺得收穫還是很多的。