开发者社区> 问答> 正文

oracle存储过程日期变量插入报错问题 ?报错

不是很明白,求大神解惑。
执行报错:
ORA-00923: 未找到要求的 FROM 关键字
ORA-06512: 在 "AICHNL.LD_JUNK_TEST1", line 10
ORA-06512: 在 line 2

过程如下:
create or replace procedure ld_junk_test1 is
v_sql varchar2(4000);
v_chkdate date;
v_recdate varchar2(8);
begin
v_chkdate := sysdate;
v_recdate := to_char(v_chkdate, 'yyyymmdd');
v_sql := 'insert into ldjunk_1013_01 select ' || v_chkdate || ',' ||
v_recdate || ' from dual';
execute immediate v_sql;
commit;
end ld_junk_test1;

v_sql 值:
insert into ldjunk_1013_01 select 13-10月-15,20151013 from dual

展开
收起
爱吃鱼的程序员 2020-06-23 14:30:58 950 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    v_sql:='insertintoldjunk_1013_01select'||v_chkdate||','||

    v_chkdate是日期类型,不能隐性转换成varchar2,因为v_sql是varchar2字符串,跟sql不同

    改成下面这样就可以了,不过不理解为什么,求解
    createorreplaceprocedureld_junk_test1is
    v_sqlvarchar2(4000);
    v_chkdatedate;
    v_recdatevarchar2(8);
    begin
    v_chkdate:=sysdate;
    v_recdate:=to_char(v_chkdate,'yyyymmdd');
    v_sql:='insertintoldjunk_1013_01select:chk_date,'||v_recdate||
    'fromdual';
    executeimmediatev_sql
    usingv_chkdate;
    commit;
    endld_junk_test1;

    v_sql:='insertintoldjunk_1013_01select:chk_date,'||v_recdate||
    'fromdual';

    改成这个可以了?估计结果也是不对的,试试以下这个
    v_sql:='insertintoldjunk_1013_01selectsysdate,'||
    v_recdate||'fromdual';
    executeimmediatev_sql;

    @PB人生
    executeimmediatev_sqlusingv_chkdate;这样带入后,可以的。但不清楚什么原因。
    直接塞sysdate也是可以的,但是我的是想要的是塞个时间变量。

    顺便还有个问题:

    executeimmediatev_sqlusingv_1,v_2...多变量的话

    dbms_output.put_line(v_sql,...)这个变量赋值怎么个格式?

    2020-06-23 14:31:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像