簡體   English   中英

將兩個或多個參數傳遞給 Oracle SQL

[英]Passing two or more parameters to Oracle SQL

我正在嘗試為兩個參數定義一個值列表(id 編號)並將它們傳遞給正在查詢 Oracle 表的 SQL。

只要我只包含一個 id 和一個參數,此代碼就可以工作

idlist = ['SLCTD']
in_vars = ','.join(':%d' % i for i in range(len(idlist)))
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in (%s)
""" % in_vars
df = pd.read_sql(query, connection, params=idlist)

現在嘗試了以下兩個參數並失敗了:

idlist = [735,'SLCTD']
in_vars = ','.join(':%d' % i for i in range(len(idlist)))
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and PLANNING_WEEK in (%s)
and SPRIDEN_ID in (%s)
""" % in_vars
df = pd.read_sql(query, connection, params=idlist)

請指教

Oracle 具有以下特性:

如果您從 tty 執行腳本,您需要執行以下操作:

sqlplus $USER/$PASSWD @file.sql param_1 param_2

進入文件.sql 你可能有:

SELECT '$1', '$2' FROM DUAL;

其中 $1 是第一個參數,$2 是第二個參數,如果你想要更多,你可以放任意多的參數。

如果您從 python 調用您的腳本。 您必須:

python3 file.py param_1 param_2 ... param_n

進入文件.py

import sys
sys.argv[1] --> param_1
sys.argv[2] --> param_2
sys.argv[n] --> param_n

對於字符串格式問題, 嘗試使用 Python 3 進行類似操作:

idlist = ['SLCTD']
in_vars = ','.join(':bv%d' % i for i in range(len(idlist)))
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and PLANNING_WEEK in ({})
and SPRIDEN_ID in ({})
""".format(in_vars,in_vars)

print(query)

output 是:

select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and PLANNING_WEEK in (:bv0)
and SPRIDEN_ID in (:bv0)

由於您正在重用綁定變量“名稱”(bv0),因此您需要在執行時執行“按名稱綁定”,我將留給您做練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM