Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PostgreSQL中创建存储过程时出错_Python_Postgresql - Fatal编程技术网

Python 在PostgreSQL中创建存储过程时出错

Python 在PostgreSQL中创建存储过程时出错,python,postgresql,Python,Postgresql,我需要在PostgreSQL数据库中创建一个存储过程来获取记录,但我得到以下错误 对如何解决这个问题有什么建议吗 注意:最终我希望在PYTHON脚本中调用这个存储过程,获取所有记录并在PYTHON中处理,然后将其插入远程MySQL数据库 ERROR: syntax error at or near "(" LINE 7: WITH reference AS (select cast(origin as text) as origin, M... ^ CONTEXT

我需要在PostgreSQL数据库中创建一个存储过程来获取记录,但我得到以下错误

对如何解决这个问题有什么建议吗

注意:最终我希望在PYTHON脚本中调用这个存储过程,获取所有记录并在PYTHON中处理,然后将其插入远程MySQL数据库

ERROR:  syntax error at or near "("
LINE 7:  WITH reference AS (select cast(origin as text) as origin, M...
              ^
CONTEXT:  invalid type name "reference AS (select cast(origin as text) as origin, MAX(case when name like '%PICK%' THEN name else null end) as "Pick_ref"
                                                  , MAX(case when name like '%OUT%' THEN name else null end) as "Pack_ref"
                                                  , MAX(case when name like '%PICK%' THEN state else null end) as "Pick_State"
                                                 , MAX(case when name like '%OUT%' THEN state else null end) as "Pack_State"

                    , MAX(case when name like '%PICK%' THEN date_done else null end) as "Pick_State_Done"
                    , MAX(case when name like '%OUT%' THEN date_done else null end) as "Pack_State_Done"
                     from dl_odoo.stock_picking  
                                 GROUP BY origin)
"
SQL state: 42601
Character: 127
这是我需要创建的整个SP代码

CREATE OR REPLACE PROCEDURE public.sync( )
LANGUAGE 'plpgsql'

AS $BODY$
DECLARE  start_time              TIMESTAMPTZ;
 WITH reference AS (select cast(origin as text) as origin, MAX(case when name like '%PICK%' THEN name else null end) as "Pick_ref"
                                                  , MAX(case when name like '%OUT%' THEN name else null end) as "Pack_ref"
                                                  , MAX(case when name like '%PICK%' THEN state else null end) as "Pick_State"
                                                 , MAX(case when name like '%OUT%' THEN state else null end) as "Pack_State"

                    , MAX(case when name like '%PICK%' THEN date_done else null end) as "Pick_State_Done"
                    , MAX(case when name like '%OUT%' THEN date_done else null end) as "Pack_State_Done"
                     from dl_odoo.stock_picking  
                                 GROUP BY origin)
,tracking_details as
(
 select magento_order_number,tracking_number,tracking_link,send_at from  staging.hermes_tracking_report
 UNION
 select magento_order_number,tracking_number,tracking_link,send_at from  staging.dhl_tracking_report
)
,temp_out as
(
SELECT   DISTINCT   o.order_id,o.order_number AS "order_number",o.customer_email
          ,sp.sale_id as "Odoo Sale ID"
          ,COALESCE(rp.name,c.first_name||' '||c.last_name) customer_name
          ,o.created_at_order "Order_date"
          ,o.order_state_1 "order_state_1"
          ,o.order_state_2 "order_state_2"
          ,o.payment_method,o.order_subtotal
          ,o.shipping_country_id
          ,COALESCE(dc.name,o.shipping_description ) as "Carrier"
          ,COALESCE(so.date_order) AS "Odoo_Order_date",
          COALESCE(so.mage_state) AS "Odoo_Mage_state",
          COALESCE(so.mage_status) AS "Odoo_Mage_status",
          CASE
              WHEN o.invoice_state=1 THEN 'OPEN'
              WHEN o.invoice_state=2 THEN 'PAID'
              WHEN o.invoice_state=3 THEN 'CANCELED'
              ELSE ''
          END AS "Mage_Invoice_state",
          COALESCE(so.invoice_status ) AS "Odoo_Invoice_status"

         ,so.state as "odoo_sale_state"
         ,"Pick_ref","Pack_ref","Pick_State",r."Pick_State_Done","Pack_State",r."Pack_State_Done"
         ,td.tracking_number,td.tracking_link,td.send_at as "Tracking_info_send_at"
         ,CASE WHEN 
              ("Pick_State" ='done'and "Pack_State"='done') 
              AND 
              (o.order_state_1 <>'complete'and o.order_state_2<>'complete') 
             THEN 'NEED TO SYNC' 
             WHEN 
              ("Pick_State" <>'done' Or "Pack_State"<>'done') 
              AND (o.order_state_1 <>'complete'and o.order_state_2<>'complete') 
              THEN 'Stll Processing'
             END as "SYNC Status"
    ,0 as shipment_status
FROM ol.orders o
   LEFT JOIN dl_odoo.sale_order so ON 
   o.order_number= so.name 
   LEFT JOIN ol.customers c on c.customer_email=o.customer_email
   LEFT JOIN dl_odoo.res_partner rp on rp.id=so.partner_id
   LEFT JOIN dl_odoo.sale_order so_2 ON o.order_number=so_2.name
   LEFT JOIN dl_odoo.sale_order_line sol ON sol.id=so.id
   LEFT JOIN dl_odoo.delivery_carrier dc on so.carrier_id=dc.id
   LEFT JOIN  dl_odoo.stock_picking sp on o.order_number=sp.origin
   LEFT JOIN reference r on r.origin=o.order_number
   LEFT JOIN tracking_details td on td.magento_order_number=o.order_number
   WHERE TO_CHAR("o"."created_at_order" ,'YYYY-MM') BETWEEN TO_CHAR(now() - INTERVAL '44 days','YYYY-MM') AND TO_CHAR(now(),'YYYY-MM')
   AND "o"."order_state_2"<>'canceled'
            AND "o"."order_state_2" <> 'pending_payment'
            AND "o"."order_state_1" <> 'canceled'
            AND "o"."order_state_1" <> 'pending_payment'
            AND "o"."order_state_1" <> 'closed'
            AND "o"."order_state_2" <> 'closed'
            AND "o".payment_method ILIKE '%bankpayment%'
  ) 
 ,odoo_cancel as
 (
 SELECT  "order_id",'canceled' as status
                  ,'canceled' as state
 FROM temp_out
 WHERE odoo_sale_state='cancel' 
     )
,odoo_complete as
 (
 SELECT  "order_id",'complete' as status
                   ,'complete' as state
                   ,tracking_number,shipment_status
 FROM temp_out
 WHERE "Pack_State"='done'
     )
SELECT  'cancel' as state, now() as created_at,'{"action":"updateOrder",' || json_build_object('data',row_to_json(row)) || '}'  
from (select * from odoo_cancel) row  as payload

UNION

SELECT 'complete' as state,now() as created_at,'{"action":"updateOrder",' || json_build_object('data',row_to_json(row)) || '}'  
from (select * from odoo_complete) row 

END
$BODY$;
您缺少“声明后开始”部分。

您缺少“声明后开始”部分