Postgres可以这样做吗? (特别是没有function()构造)?

时间:2010-03-23 20:54:15

标签: sql database oracle postgresql plsql

我正在移植一些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;

3 个答案:

答案 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);