oracle存储过程日期变量插入报错问题 ?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

爱吃鱼的程序员 2020-06-23 14:30:58 70

不是很明白,求大神解惑。
执行报错:
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

存储 Oracle 关系型数据库
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-23 14:31:13

    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,...)这个变量赋值怎么个格式?

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题