儲存過程問題型急啊,先謝謝瞭

pine460 2008-03-03 10:32:27
create or replace
procedure TempTest(archiveDate in Date,CIF_APLOG in varchar2,CIF_APLOGFIELD in varchar2)
as
sqlstr varchar2(255);
begin
sqlstr := 'insert into CIF_ARCHIVEDATE(ARCHIVEDATE) values(''' ||archiveDate|| ''')';
execute immediate sqlstr;
sqlstr := 'create table '|| CIF_APLOG ||' as select * from CIF_APLOG where LOGDATETIME<'||archiveDate;
--sqlstr := 'create table CIF_20080229 as select * from CIF_APLOG where to_char(LOGDATETIME,''yyyy/MM/dd'')<'|| to_char(archiveDate,'yyyy/MM/dd');
execute immediate sqlstr;
end;

錯誤:
Connecting to the database CIF.
ORA-00933: SQL command not properly ended
ORA-06512: at "NETEXPRESS.SA.TEMPTEST", line 9
ORA-06512: at line 10
Process exited.
Disconnecting from the database CIF.
...全文
46 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
richard360347477 2008-03-13
  • 打赏
  • 举报
回复
虽然你的archiveDate定义为date型,但是在执行sqlstr的时候,却当成时varchar2类型处理的,你应该将
archiveDate应该有这样一个过程的处理:to_date(to_char(archiveDate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)

即:

v_archiveDate:=to_char(archiveDate,‘yyyy-mm-dd’);
sqlstr='create table ' ¦ ¦ CIF_APLOG ¦ ¦' as select * from CIF_APLOG where LOGDATETIME <to_date('||'''||v_archiveDate||'','||''yyyy-mm-dd'';
it_sy_boy 2008-03-13
  • 打赏
  • 举报
回复
insert into cif_archivedate(archivedate) values (archivedate);
commit;

create table cif_20080229 as select * from CIF_APLOG where logdatetime<archivddate;
commit;

如果把变量做为要执行的sql语句,对于日期型的转换了。例如定义一个v_date varchar(20);
v_date:=to_char(archivedate,'yyyy-mm-dd');
sqlstr:='insert into CIF_ARCHIVEDATE(ARCHIVEDATE) values(to_date''' ||v_date||''',''yyyy-mm-dd'')';
execute sqlstr;
commit;

这样做虽然麻烦,但是可以根据断点监测出sql语句的正确性,便于调试

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧