Sybase IQ load table 语句的自动生成的存储过程

本文介绍了一个用于将CSV文件动态加载到指定数据库表的存储过程。该过程通过参数配置灵活地处理不同表格结构,支持自定义字段分隔符、行分隔符及日志路径等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROCEDURE "DBA"."dynamic_load"(@tablename varchar(100),
     @tableown varchar(100),
     @columnDelimiter varchar(8),
     @rowDelimiter varchar(8),
     @datapath varchar(100),
     @msglogpath varchar(100),
     @rowlogpath varchar(100))
as
begin
  declare @tablecolumn varchar(30)
  declare @sqltext varchar(3000)
  declare @i int
 
  set @sqltext ='LOAD TABLE '+@tableown+'.'+@tablename+'('
  declare dynamic_load_cur cursor for select column_name from sp_iqcolumn(@tablename,@tableown)
  open dynamic_load_cur
  fetch dynamic_load_cur into @tablecolumn
  set @i=0
  while @@sqlstatus=0
  begin
    --处理当前记录
    set @i=@i+1
    if @i=1
       set @sqltext=@sqltext+@tablecolumn
    else
       set @sqltext=@sqltext+' '+@columnDelimiter+','+@tablecolumn
    fetch dynamic_load_cur into @tablecolumn
  end
  set @sqltext=@sqltext+' ' + @rowDelimiter+')'
  set @sqltext=@sqltext+' FROM ' + @datapath + ' ESCAPES OFF' + ' QUOTES ON' + ' NOTIFY 1000000'
  set @sqltext=@sqltext+ ' IGNORE CONSTRAINT UNIQUE 0,DATA VALUE 0'
  set @sqltext=@sqltext+' message log ' + @msglogpath + ' row log ' + @rowlogpath
  set @sqltext=@sqltext+' only log unique,data value '+ ' log delimited by ' + @columnDelimiter
  set @sqltext=@sqltext+ ' WITH CHECKPOINT ON'
  message @sqltext type info to client
  close dynamic_load_cur
  deallocate cursor dynamic_load_cur
  set temporary option Conversion_error='Off'
  execute(@sqltext)
  commit
end

 

 

 

 

 

---调用的语句

begin
  declare @tablename varchar(100)
  declare @tableown varchar(100)
  declare @columnDelimiter varchar(8)
  declare @rowDelimiter varchar(8)
  declare @datapath varchar(100)
  declare @msglogpath varchar(100)
  declare @rowlogpath varchar(100)
 
  set @tablename='FIX_MODULE_INFO'
  set @tableown='BIALL_SFM'
  set @columnDelimiter=''','''
  set @rowDelimiter='''//x0a'''
  set @datapath='''/usr/iq127/upload/biall/*.csv'''
  set @msglogpath='''/usr/iq127/upload/test_msg.log'''
  set @rowlogpath='''/usr/iq127/upload/test_row.log'''
  exec dynamic_load @tablename,@tableown,@columnDelimiter,@rowDelimiter,@datapath,@msglogpath,@rowlogpath
end; 

 

注意:如果不能导入,请在输出的load 语句中,调整最后一列为主键。

说明:上面的存储过程转载了别人的成功,具体的url忘记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值