oracle 存储过程 报 无效字符

本文介绍了一种使用Oracle PL/SQL动态执行SQL语句的方法,用于批量插入数据到ETL_SUCESS_AMOUNT表中。该方法根据指定的时间范围,从源表(通过变量lv_table_name动态指定)中统计记录数,并按小时进行汇总。

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

lv_sql:='
  insert into ETL_SUCESS_AMOUNT
  select SEQ_OS_ETL_AMOUNTID.NEXTVAL AS AMOUNTID,1,AMOUNT_DATA,AMOUNT_HOUR,
  serviceid,portalid,mouduleid,actionid,RESERVE1_ID,RESERVE2_ID,RESERVE3_ID,
 

  RESERVE4_ID,AMOUNT,AMOUNT_TIME
  from
  ( 
    select
    trunc(INSERTTIME) AS AMOUNT_DATA,
    TO_CHAR(INSERTTIME,''HH24'') AS AMOUNT_HOUR, 
    serviceid,portalid,mouduleid,actionid,
    NULL AS RESERVE1_ID,
    NULL AS RESERVE2_ID,
    NULL AS RESERVE3_ID,
    NULL AS RESERVE4_ID,
    count(*) AS AMOUNT,
    SYSDATE AS AMOUNT_TIME
    from '||lv_table_name||' 
    where inserttime > to_date(:1,''yyyy-mm-dd hh24:mi:ss'')
    and  inserttime < to_date(:2,''yyyy-mm-dd hh24:mi:ss'')
    group by trunc(INSERTTIME),TO_CHAR(INSERTTIME,''HH24''),serviceid,mouduleid,portalid,actionid
  )';
  execute immediate lv_sql USING p_sdate,p_edate;

-- 细节动态语句里面不需要分号

--细节(''HH24'') 动态语句里面单引号要双写

--细节 from '||lv_table_name||'  语句之间注意空格符号

--细节使用参数:1   USING p_sdate,p_edate;

在动态SQL中加个;号,调用函数时总是报无效字符,找了半天才发现原因o(╥﹏╥)o;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值