def insert_ods_sc(odskettle):
conn = sc_conn()
try:
cursor = conn.cursor()
insert_query = 'INSERT INTO BIPAY.BI_SYNC_TABLES_V2_N VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22)'
if len(odskettle) != 0:
for i in range(len(odskettle)):
id = odskettle.ix[i,0]
title = odskettle.ix[i,1]
schedule_type = odskettle.ix[i,2]
status = odskettle.ix[i,3]
db_type = odskettle.ix[i,4]
data_source = odskettle.ix[i,5]
s_schema = odskettle.ix[i,6]
s_table_name = odskettle.ix[i,7]
t_schema = odskettle.ix[i,8]
t_table_name = odskettle.ix[i,9]
t_wrk_schema = odskettle.ix[i,10]
t_get_max_sql = odskettle.ix[i,11]
flg_truncate_table = odskettle.ix[i,12]
s_sql = odskettle.ix[i,13]
t_before_sql = odskettle.ix[i,14]
t_after_sql = odskettle.ix[i,15]
success_mail = odskettle.ix[i,16]
create_dt = odskettle.ix[i,17]
created_by = odskettle.ix[i,18]
customer_var = odskettle.ix[i,19]
sync_type = odskettle.ix[i,20]
create_sql = str(odskettle.ix[i,21])
print create_sql
params = [id, title, schedule_type, status, db_type, data_source, s_schema, s_table_name, t_schema, t_table_name, t_wrk_schema, t_get_max_sql,
flg_truncate_table, s_sql, t_before_sql, t_after_sql, success_mail, create_dt, created_by, customer_var, sync_type, create_sql]
cursor.execute('"""'+ create_sql + '"""')
conn.commit()
cursor.close()
print "ODSKETTLE FINISH!"
else:
print "NO NEW DW_JOB!"
except cx_Oracle.DatabaseError as msg:
print(msg)
finally:
pass
执行的Python代码,
create_sql存储的建表语句是
create table K_TRADE_ODS.PAYM_TB_BIZ_PRODUCT_MAP
(
  biz_product_code    VARCHAR2(32) not null,
  product_code        VARCHAR2(32) not null,
  enable_flag         CHAR(1) not null,
  memo                VARCHAR2(512),
  gmt_create          DATE not null,
  gmt_modify          DATE not null,
  buyer_account_type  VARCHAR2(50),
  seller_account_type VARCHAR2(50),
  extension           VARCHAR2(128)
)
报错的信息是
ORA-00972: 标识符过长
大神帮忙解决一下

解决方案 »

  1.   

    应该是把“K_TRADE_ODS.PAYM_TB_BIZ_PRODUCT_MAP”整个当做表名了,建议先不使用用户名试试,如果是这个原因再找一下解决办法
      

  2.   

    oracle表名最长30个字符,这个都36个字符了,建议把表名缩减。
      

  3.   

    有K_TRADE_ODS这个用户吗?
    create_sql存储的建表语句后面是否需要加上一个分号?
    '"""'+ create_sql + '"""'   注意检查语句的前后是否缺少空格?
      

  4.   

    select length('K_TRADE_ODS.PAYM_TB_BIZ_PRODUCT_MAP') from dual;
    35个字符,36个字符是复制的时候带空格了