[英]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.