用Python在Oracle中建表报标识符过长错误

scy1993 2018-09-13 10:52:57
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: 标识符过长
大神帮忙解决一下
...全文
747 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
可乐乐可 2018-09-17
  • 打赏
  • 举报
回复
引用 4 楼 scy1993 的回复:
你是怎么查出来36个字符的。。。。@可乐乐可

select length('K_TRADE_ODS.PAYM_TB_BIZ_PRODUCT_MAP') from dual;

35个字符,36个字符是复制的时候带空格了
碧水幽幽泉 2018-09-14
  • 打赏
  • 举报
回复
有K_TRADE_ODS这个用户吗?
create_sql存储的建表语句后面是否需要加上一个分号?
'"""'+ create_sql + '"""' 注意检查语句的前后是否缺少空格?
scy1993 2018-09-13
  • 打赏
  • 举报
回复
不行 去掉还是报这个错
lyangsoft 2018-09-13
  • 打赏
  • 举报
回复
应该是把“K_TRADE_ODS.PAYM_TB_BIZ_PRODUCT_MAP”整个当做表名了,建议先不使用用户名试试,如果是这个原因再找一下解决办法
scy1993 2018-09-13
  • 打赏
  • 举报
回复
你是怎么查出来36个字符的。。。。@可乐乐可
可乐乐可 2018-09-13
  • 打赏
  • 举报
回复
oracle表名最长30个字符,这个都36个字符了,建议把表名缩减。

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧