使用V_SQL不喜欢包含$符号的字段名
Using V_SQL does not like the field name that contains the $ symbol
我正在尝试使用 python library import cx_Oracle 进行查询,但是,由于该字段包含 $ 我无法编译代码。例如,字段名称是 CF$_WHY
import datetime
import docx
import cx_Oracle
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx import Document
import pathlib
import os
def why_(Part_No,Rev_no):
dsn_tns = cx_Oracle.makedsn('xxxx.xxx.local', 'xxxxx', service_name='IFSTEST')
conn = cx_Oracle.connect(user=r'xxxxxx', password='xxxxxx', dsn=dsn_tns)
c = conn.cursor()
v_sql =('SELECT ENG_PART_REVISION_CFT.CF$_WHY \
from ENG_PART_REVISION_CFT ,\
ENG_PART_REVISION_REFERENCE \
WHERE ENG_PART_REVISION_REFERENCE.PART_NO = UPPER(TRIM(:Part_No)) and ENG_PART_REVISION_REFERENCE.Part_rev= UPPER(TRIM(:Rev_no)) AND\
ENG_PART_REVISION_CFT.ROWKEY = ENG_PART_REVISION_REFERENCE.objkey')
c.execute(v_sql,[Part_No,Rev_no])
for result in c:
if result == 4:
print("from the Method "+ c)
else:
print(" ")
return result
Part_No = input("Enter the obsolete part number: ")
Rev_no = input("Enter the obsolete part revision: ")
Part_No_New_Part = input("Enter the replacement part number: ")
print('Part number '+Part_No+ ' is no longer available being replaced by Loram part number '+Part_No_New_Part+', due the following reason '+ why_(Part_No,Rev_no))
输出:
File "comparing.py", line 31, in <module> print('Part number '+Part_No+ ' is no longer available being replaced by Loram part number '+Part_No_New_Part+', due the following reason '+ why_(Part_No,Rev_no)) File "comparing.py", line 19, in why_ c.execute(v_sql,[Part_No,Rev_no])`enter code here` cx_Oracle.DatabaseError: ORA-00904: "ENG_PART_REVISION_CFT"."CF$_WHY": invalid identifier
如果您的 table 名称包含不属于有效标识符的字符,您需要引用 table 名称,如:
v_sql = """
select "ENG_PART_REVISION_CFT.CF$_WHY"
from ENG_PART_REVISION_CFT, ENG_PART_REVISION_REFERENCE
where ENG_PART_REVISION_REFERENCE.PART_NO = UPPER(TRIM(:Part_No))
and ENG_PART_REVISION_REFERENCE.Part_rev= UPPER(TRIM(:Rev_no))
and ENG_PART_REVISION_CFT.ROWKEY = ENG_PART_REVISION_REFERENCE.objkey"""
我正在尝试使用 python library import cx_Oracle 进行查询,但是,由于该字段包含 $ 我无法编译代码。例如,字段名称是 CF$_WHY
import datetime
import docx
import cx_Oracle
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx import Document
import pathlib
import os
def why_(Part_No,Rev_no):
dsn_tns = cx_Oracle.makedsn('xxxx.xxx.local', 'xxxxx', service_name='IFSTEST')
conn = cx_Oracle.connect(user=r'xxxxxx', password='xxxxxx', dsn=dsn_tns)
c = conn.cursor()
v_sql =('SELECT ENG_PART_REVISION_CFT.CF$_WHY \
from ENG_PART_REVISION_CFT ,\
ENG_PART_REVISION_REFERENCE \
WHERE ENG_PART_REVISION_REFERENCE.PART_NO = UPPER(TRIM(:Part_No)) and ENG_PART_REVISION_REFERENCE.Part_rev= UPPER(TRIM(:Rev_no)) AND\
ENG_PART_REVISION_CFT.ROWKEY = ENG_PART_REVISION_REFERENCE.objkey')
c.execute(v_sql,[Part_No,Rev_no])
for result in c:
if result == 4:
print("from the Method "+ c)
else:
print(" ")
return result
Part_No = input("Enter the obsolete part number: ")
Rev_no = input("Enter the obsolete part revision: ")
Part_No_New_Part = input("Enter the replacement part number: ")
print('Part number '+Part_No+ ' is no longer available being replaced by Loram part number '+Part_No_New_Part+', due the following reason '+ why_(Part_No,Rev_no))
输出:
File "comparing.py", line 31, in <module> print('Part number '+Part_No+ ' is no longer available being replaced by Loram part number '+Part_No_New_Part+', due the following reason '+ why_(Part_No,Rev_no)) File "comparing.py", line 19, in why_ c.execute(v_sql,[Part_No,Rev_no])`enter code here` cx_Oracle.DatabaseError: ORA-00904: "ENG_PART_REVISION_CFT"."CF$_WHY": invalid identifier
如果您的 table 名称包含不属于有效标识符的字符,您需要引用 table 名称,如:
v_sql = """
select "ENG_PART_REVISION_CFT.CF$_WHY"
from ENG_PART_REVISION_CFT, ENG_PART_REVISION_REFERENCE
where ENG_PART_REVISION_REFERENCE.PART_NO = UPPER(TRIM(:Part_No))
and ENG_PART_REVISION_REFERENCE.Part_rev= UPPER(TRIM(:Rev_no))
and ENG_PART_REVISION_CFT.ROWKEY = ENG_PART_REVISION_REFERENCE.objkey"""