我正在移植一些oracle调用。今天我遇到了这个看起来像“程序”语言的代码,但没有在函数或任何东西中声明......我的问题是:postgres可以用这种形式处理这个吗?这需要什么形式?
DECLARE
BEGIN
IF :start_time IS NULL OR
:start_date IS NULL OR
:end_time IS NULL OR
:end_date IS NULL THEN
INSERT INTO ARPSPACE_AVAILABILITY
(ARP_ARPSPACE_NM, ASA_TIME_ID, ASA_START_DT, ASA_END_DT)
SELECT :arpspace_name,
1,
ASP.ASP_START_DT,
ASP.ASP_STOP_DT
FROM ASP
WHERE EXISTS
(SELECT ARP.ARP_ARPSPACE_NM
FROM ARPSPACE ARP
WHERE ARP.ARP_ARPSPACE_NM = :arpspace_name);
END IF;
END;
答案 0 :(得分:2)
不,尚未声明功能。在版本9.0(即将推出测试版)中,这将是可能的:http://developer.postgresql.org/pgdocs/postgres/sql-do.html
答案 1 :(得分:1)
简短的回答是肯定的,如果你可以宣布一个功能。有关详细信息,请参阅手册中的plpgsql。
答案 2 :(得分:1)
为什么不这样做(假设:标签是准备好的查询参数)?
INSERT INTO ARPSPACE_AVAILABILITY
(ARP_ARPSPACE_NM, ASA_TIME_ID, ASA_START_DT, ASA_END_DT)
SELECT :arpspace_name,
1,
ASP.ASP_START_DT,
ASP.ASP_STOP_DT
FROM ASP
WHERE EXISTS
(SELECT ARP.ARP_ARPSPACE_NM
FROM ARPSPACE ARP
WHERE ARP.ARP_ARPSPACE_NM = :arpspace_name)
AND (:start_time IS NULL OR
:start_date IS NULL OR
:end_time IS NULL OR
:end_date IS NULL);