При использовании V_SQL не нравится имя поля, содержащее символ $

Однако я пытаюсь выполнить запрос, используя импорт библиотеки Python 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

person JUANLUISSG    schedule 25.07.2019    source источник
comment
Возможный дубликат Синтаксис Oracle SQL: идентификатор в кавычках   -  person Giacomo Alzetta    schedule 26.07.2019


Ответы (1)


Если имя вашей таблицы содержит символы, которые не принадлежат действительному идентификатору, вам нужно заключить имя таблицы в кавычки, например:

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"""
person Anthony Tuininga    schedule 26.07.2019