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

v_sql := 'insert into ldjunk_1013_01 select ' || v_chkdate || ',' ||

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

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

改成下面这样就可以了,不过不理解为什么,求解
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 :chk_date,' || v_recdate ||
' from dual';
execute immediate v_sql
using v_chkdate;
commit;
end ld_junk_test1;

v_sql := 'insert into ldjunk_1013_01 select :chk_date,' || v_recdate ||
' from dual';

改成这个可以了?估计结果也是不对的,试试以下这个
v_sql := 'insert into ldjunk_1013_01 select sysdate,' ||
v_recdate || ' from dual';
execute immediate v_sql;

顺便还有个问题:

execute immediate v_sql using v_1,v_2 ... 多变量的话

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