Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python代码生成错误`ORA-00917:缺少逗号';,但是没有逗号丢失。怎么了?_Python_Oracle - Fatal编程技术网

Python代码生成错误`ORA-00917:缺少逗号';,但是没有逗号丢失。怎么了?

Python代码生成错误`ORA-00917:缺少逗号';,但是没有逗号丢失。怎么了?,python,oracle,Python,Oracle,我编写了Python代码,但出现以下错误: 错误ORA-00917:缺少逗号 但是没有遗漏逗号;怎么了 sTableName = "IRM_PREP_EPS_NRTRDEFLAT" # build the SQL insert statement sql_str = "INSERT INTO " + sTableName + " (ID,EPSDV_ERROR_FILE,EPSDV_ERROR_FILE_CREATION,EPSDV_RECORD_NUMBER,EPSDV_ERROR_

我编写了Python代码,但出现以下错误:

错误ORA-00917:缺少逗号

但是没有遗漏逗号;怎么了

sTableName = "IRM_PREP_EPS_NRTRDEFLAT"

# build the SQL insert statement    
sql_str = "INSERT INTO " + sTableName + " (ID,EPSDV_ERROR_FILE,EPSDV_ERROR_FILE_CREATION,EPSDV_RECORD_NUMBER,EPSDV_ERROR_CODE,EPSDV_ERROR_MESSAGE,"
sql_str = sql_str + "EPSDV_CURRENT_AREA,EPSDV_PREVIOUS_AREA,EPSDV_EQUIPMENT,EPSDV_PORTAL,EPSDV_PLAN,EPSDV_OPERATION,EPSDV_EXTERNAL_FILENAME,"
sql_str = sql_str + "EPSDV_LAST_MODIFIED_BY,EPSDV_LAST_MODIFIED_DATE,RECORD_TYPE,SPECIFICATION_VERSION_NUMBER,RELEASE_VERSION_NUMBER,SENDER,"
sql_str = sql_str + "RECIPIENT,SEQUENCE_NUMBER,FILE_AVAILABLE_TIMESTAMP,UTC_TIMEOFFSET_FAT,IMSI,IMEI,CALL_EVENT_START_TIMESTAMP,UTC_TIMEOFFSET_CET,"
sql_str = sql_str + "CALL_EVENT_DURATION,CAUSE_FOR_TERMINATION,TELE_SERVICE_CODE,BEARER_SERVICE_CODE,SUPPLEMENTARY_SERVICE_CODE,DIALLED_DIGITS,"
sql_str = sql_str + "CONNECTED_NUMBER,THIRD_PARTY_NUMBER,CALLING_NUMBER,RECENTITY_ID,CALL_REFERENCE,ACCESS_POINT_NAME_NI,ACCESS_POINT_NAME_OI,"
sql_str = sql_str + "DATA_VOLUME_INCOMING,DATA_VOLUME_OUTGOING,SGSN_ADDRESS,GGSN_ADDRESS,CHARGING_ID,CHARGE_AMOUNT,SERVING_NETWORK,MSISDN,"
sql_str = sql_str + "LOCATION_AREA,CELL_ID,FILLER) VALUES ("

sql_str = sql_str + ID + ',' + EPSDV_ERROR_FILE + ',' + EPSDV_ERROR_FILE_CREATION + ',' + EPSDV_RECORD_NUMBER + ',' + EPSDV_ERROR_CODE + ',' + EPSDV_ERROR_MESSAGE
sql_str = sql_str + ',' + EPSDV_CURRENT_AREA + ',' + EPSDV_PREVIOUS_AREA + ',' + EPSDV_EQUIPMENT + ',' + EPSDV_PORTAL + ',' + EPSDV_PLAN + ',' 
sql_str = sql_str + EPSDV_OPERATION + ',' + EPSDV_EXTERNAL_FILENAME + ',' + EPSDV_LAST_MODIFIED_BY + ',' + EPSDV_LAST_MODIFIED_DATE + ','
sql_str = sql_str + RECORD_TYPE + ',' + SPECIFICATION_VERSION_NUMBER + ',' + RELEASE_VERSION_NUMBER + ',' + SENDER + ',' + RECIPIENT + ','
sql_str = sql_str + SEQUENCE_NUMBER + ',' + FILE_AVAILABLE_TIMESTAMP + ',' + UTC_TIMEOFFSET_FAT + ',' + IMSI + ',' + IMEI + ',' 
sql_str = sql_str + CALL_EVENT_START_TIMESTAMP + ',' + UTC_TIMEOFFSET_CET + ',' + CALL_EVENT_DURATION + ',' + CAUSE_FOR_TERMINATION + ',' 
sql_str = sql_str + TELE_SERVICE_CODE + ',' + BEARER_SERVICE_CODE + ',' + SUPPLEMENTARY_SERVICE_CODE + ',' + DIALLED_DIGITS + ',' + CONNECTED_NUMBER
sql_str = sql_str + ',' + THIRD_PARTY_NUMBER + ',' + CALLING_NUMBER + ',' + RECENTITY_ID + ',' + CALL_REFERENCE + ',' + ACCESS_POINT_NAME_NI
sql_str = sql_str + ',' + ACCESS_POINT_NAME_OI + ',' + DATA_VOLUME_INCOMING + ',' + DATA_VOLUME_OUTGOING + ',' + SGSN_ADDRESS + ','
sql_str = sql_str + GGSN_ADDRESS + ',' + CHARGING_ID + ',' + CHARGE_AMOUNT + ',' + SERVING_NETWORK + ',' + MSISDN + ',' + LOCATION_AREA + ','
sql_str = sql_str + CELL_ID + ',' + FILLER + ')'

我不知道您的错误位置,它可能是由几个原因造成的,例如,如果您的字符串未包含在
引号中。将变量传递给sql是一种非常错误的方法

就绑定变量的使用(oracle SQL最佳实践的基石)而言,最好是将您的语句编写为(未测试):


调试此类问题的最简单方法是打印出该语句并在您常用的任何SQL工具中进行测试。在这里,你基本上要求我们找出你的一个拼写错误…你必须阅读关于ORA的内容-这意味着错误来自Oracle,而不是Python。也就是说,您应该真正学习一些Python,因为这是一种构建SQL字符串的非常糟糕的方法。(提示:三重引号和
,'.join()
sTableName = 'IRM_PREP_EPS_NRTRDEFLAT'
fields_str = ("ID,EPSDV_ERROR_FILE,EPSDV_ERROR_FILE_CREATION,EPSDV_RECORD_NUMBER,"
              "EPSDV_ERROR_CODE,EPSDV_ERROR_MESSAGE,EPSDV_CURRENT_AREA,"
              "EPSDV_PREVIOUS_AREA,EPSDV_EQUIPMENT,EPSDV_PORTAL,EPSDV_PLAN,"
              "EPSDV_OPERATION,EPSDV_EXTERNAL_FILENAME,EPSDV_LAST_MODIFIED_BY,"
              "EPSDV_LAST_MODIFIED_DATE,RECORD_TYPE,SPECIFICATION_VERSION_NUMBER,"
              "RELEASE_VERSION_NUMBER,SENDER,RECIPIENT,SEQUENCE_NUMBER,"
              "FILE_AVAILABLE_TIMESTAMP,UTC_TIMEOFFSET_FAT,IMSI,IMEI,"
              "CALL_EVENT_START_TIMESTAMP,UTC_TIMEOFFSET_CET,CALL_EVENT_DURATION,"
              "CAUSE_FOR_TERMINATION,TELE_SERVICE_CODE,BEARER_SERVICE_CODE,"
              "SUPPLEMENTARY_SERVICE_CODE,DIALLED_DIGITS,CONNECTED_NUMBER,"
              "THIRD_PARTY_NUMBER,CALLING_NUMBER,RECENTITY_ID,CALL_REFERENCE,"
              "ACCESS_POINT_NAME_NI,ACCESS_POINT_NAME_OI,DATA_VOLUME_INCOMING,"
              "DATA_VOLUME_OUTGOING,SGSN_ADDRESS,GGSN_ADDRESS,CHARGING_ID,"
              "CHARGE_AMOUNT,SERVING_NETWORK,MSISDN,LOCATION_AREA,CELL_ID,FILLER")
fields = fields_str.split(',')
vars = ','.join(map(':{}'.format, fields)))
sql = 'INSERT INTO {} ({}) VALUES({})'.format(sTableName,
           fields_str, vars)
values = {f: locals()[f] for f in fields}
cur.execute(sql, values)