使用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"""