不是很明白,求大神解惑。
执行报错:
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:='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,...)这个变量赋值怎么个格式?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。