gpt4 book ai didi

python - CX_Oracle CTE 执行

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:37 25 4
gpt4 key购买 nike

我在 Oracle 中构建了一个关系数据模型,现在使用 Python 创建一个 GUI。我需要在 IDE 中执行 SQL 语句,但收到 cx_Oracle.DatabaseError: ORA-00936: Missing expression 错误消息。这是一个在 TOAD 中运行良好的 CTE,当我删除 CTE 并放入一个简单的 SQl 语句时,它执行得很好。

我可以在数据库中构建一个 View 并执行 select * from 但我不想那样做。

我是 Python 新手,所以我确信有更好的方法来做到这一点。

import cx_Oracle

con = cx_Oracle.connect('Example', 'Example', "Example")
cur = con.cursor()


statement = ("with r1 as (" +
" select " +
" r.PARENT_ITEM_id, " +
" D.SC_ID, " +
" --F.TONS" +
" SUM(ROUND(F.TONS*Pic_Distro*2000*s.stk_lvl_mult)) as Stocking_Lvl" +
" from PIC_DISTRO_TBL D" +
" Left Join Part_Velocity_TBL P on (P.item_ID = D.Item_ID and D.SC_ID = P.SC_ID)" +
" Left Join Forecast_TBL F on (D.Bucket_ID = F.Bucket_ID and D.SC_ID =F.SC_ID)" +
" left join Stock_lvl_tbl S on (S.Velocity_id = P.VELOCITY_ID)" +
" left join item_tbl I on (i.item_ID = D.ITEM_ID)" +
" left join parent_item_tbl R on (r.PARENT_ITEM_id = i.PARENT_ITEM_id)" +
" Where F.MTH = '4'" +
" and F.YEAR = '2017'" +
" and P.Velocity_id in ('A','B','C')" +
" and D.SC_ID in ('01','02')" +
" -- and SUM(ROUND(F.TONS*Pic_Distro*2000*s.stk_lvl_mult)) > 0" +
" Group by " +
" r.PARENT_ITEM_id, D.SC_ID " +
" Order by " +
" D.SC_ID DESC, Stocking_lvl DESC" +
")," +
"R2 as (" +
"select r.Parent_Item_ID, o.SC_ID, " +
"coalesce(sum(avail_wt), 0) as Avail_Wt" +
" from" +
" open_inv_tbl O" +
" left join item_tbl I on (i.item_ID = o.ITEM_ID)" +
" left join parent_item_tbl R on (r.PARENT_ITEM_id = i.PARENT_ITEM_id)" +
" Where r.Parent_item_ID is not null" +
" Group by r.Parent_Item_ID,o.SC_ID)" +
"select " +
" r1.PARENT_ITEM_id, " +
" R1.SC_ID, R1.Stocking_Lvl , " +
" coalesce(R2.Avail_wt, 0 ) as Avail_Wt, " +
" coalesce(R2.Avail_wt/R1.Stocking_Lvl, 0) as Precantage" +
" From R1" +
" left join R2 on (R1.parent_item_id = R2.parent_item_id and R1.Sc_ID = R2.Sc_ID) " +
" Where R1.Stocking_lvl > '0' " +
" Order by SC_id Desc, Stocking_Lvl Desc)" )

cur.arraysize = 2000
cur.execute(statement)

最佳答案

当用三引号括起来时,Python 为您提供多行字符串。尝试执行单个字符串并检查您的查询是否正确。

statement = """
with r1 as (
select
r.PARENT_ITEM_id,
D.SC_ID,
--F.TONS
...
"""
cur.execute(statement)

关于python - CX_Oracle CTE 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com