ora-00936:插入时缺少python和oracle的表达式

dauxcl2d  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(299)

我花了很多天试图找出ora-00936:在使用executemany()时丢失表达式的错误。如果一次插入一行,则插入有效。我在网上搜索、阅读并尝试了一些建议,但似乎都不管用。我需要帮助。以下是表格说明:

  1. ColumnName,ColID,PK,IndexPos,Null,DataType,Default,DefaultOnNull,Histogram,NumDistinct,NumNulls,Density,EncryptionAlg,Salt,Trigger,Virtual
  2. YEARMONTH,1,1,1,N,DATE,,False,None,1997,0,0.0005,,,,False
  3. PHASE,4,,,Y,VARCHAR2 (7 Char),,False,Frequency,5,0,0.00013,,,,False
  4. INDEXVALUE,3,,,Y,NUMBER (3,2),,False,None,728,0,0.00137,,,,False
  5. CLIMATEINDEX,2,2,2,N,VARCHAR2 (4 Char),,False,Frequency,3,0,0.00013,,,,False

使用python的csv读取器从csv文件中读取数据并将其放入列表中。数据如下:

  1. file_data = [['1854-01-01', 'PDO', '0.11', 'POS'], ['1854-02-01', 'PDO', '-0.24', 'NEG'], ['1854-03-01', 'PDO', '-0.4', 'NEG'], ['1854-04-01', 'PDO', '-0.44', 'NEG'], ['2020-04-01', 'ONI', '0.28', 'NEUTRAL'], ['2020-04-01', 'PDO', '-1.33', 'NEG'], ['2020-05-01', 'PDO', '-0.7', 'NEG']]

这是插入sql:

  1. in_query = ('insert into myschema.monthly_climate_index(YEARMONTH, CLIMATEINDEX, INDEXVALUE, PHASE) values (DATE :YEARMONTH, :CLIMATEINDEX, :INDEXVALUE, :PHASE)')

这是execute many命令:

  1. cursor.executemany(in_query, file_data)

结果是:ora-00936:思念的表情谢谢!!!

xriantvc

xriantvc1#

这是您的问题:

  1. insert into myschema.monthly_climate_index
  2. (YEARMONTH, CLIMATEINDEX, INDEXVALUE, PHASE) values
  3. (DATE :YEARMONTH, :CLIMATEINDEX, :INDEXVALUE, :PHASE)
  4. ---------------
  5. ^^^ this

我认为你不能那样用日期; date 关键字看起来好像要插入日期文字,例如。 date '2020-06-18' . 如果是这样,一切都应该成为 :YEARMONTH .

5m1hhzi4

5m1hhzi42#

试试这个:
将sql更新为:

  1. in_query = """ insert into myschema.monthly_climate_index(YEARMONTH, CLIMATEINDEX, INDEXVALUE, PHASE) values (:1, :2, :3, :4) """

如果仍然不起作用,试着把列表改成这样的元组数组

  1. [('1854-01-01', 'PDO', '0.11', 'POS')]

而且,使用甲骨文日期也很棘手。因此,如果日期兼容性存在问题,请尝试将日期字符串文本更改为以下内容:

  1. '01-JAN-1854'

而不是

  1. '1854-01-01'

相关问题