CREATE OR REPLACE PROCEDURE Auto_CLJS IS tmpVar NUMBER; /****************************************************************************** PURPOSE: 自动潮流计算 REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 2003-10-17 Fred Zhang 1. Created this procedure.******************************************************************************/ Min_CBRQ date; ---最小的抄表时间 Max_CBRQ tameter_rt.CBRQ%type; ---最大的抄表时间 v_CBRQ Date; --抄表时间 v_count integer;--电表是否有数据 BEGIN /*看电表运行表中是否有数据*/ exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Min_CBRQ:=to_date('2003-12-3 05:12:04','yyyy-mm-dd HH24:MI:SS'); select count(*) into v_count from tameter_rt; /*如果有数据,则计算*/ if v_count <>0 then CLJS_Ameter_RT_prepare; CLJS_Prepare; select distinct max(CBRQ),min(CBRQ) into Max_CBRQ,Min_CBRQ from tameter_rt; v_CBRQ:=Min_CBRQ; while v_CBRQ<Max_CBRQ loop CLJS_Main(v_CBRQ); v_CBRQ:=v_CBRQ+15/(24*60); end loop; /*计算完成后电表数据存档*/ Ametdata_To_Arch; else /*如果没有数据,则不计算*/ null; end if; tmpVar := 0; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END Auto_CLJS;/
我在存储过程中加了 exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 或者 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 可是编译有错
请问:lianhg(lianhg) :还在吗? 我在等你解答。
exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';改为: lv varchar2(100); lv :='alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss'''; execute immediate lv;
我现在是在存储过程中定义的一个Date类型的变量v_date,然后
v_date:=to_date('2003-12-3 5:12:4','yyyy-mm-dd HH24:MI:SS'); 可是执行完后v_date只有2003-12-3,可是小时,分钟,秒没有了 我不是表中的Date类型的字段,我的问题出在哪里? 如可解决?快帮我看看:要不然我的好多存储过程都改写
2)如果定义的是DATE型的,Date可以存储年月日,和小时,分钟,秒
3)用 SELECT TO_CHAR(mydate,'yyyy-mm-dd HH24:MI:SS') from tbl ; 测试表中
的数据
tmpVar NUMBER;
/******************************************************************************
PURPOSE: 自动潮流计算 REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2003-10-17 Fred Zhang 1. Created this procedure.******************************************************************************/
Min_CBRQ date; ---最小的抄表时间
Max_CBRQ tameter_rt.CBRQ%type; ---最大的抄表时间
v_CBRQ Date; --抄表时间
v_count integer;--电表是否有数据
BEGIN
/*看电表运行表中是否有数据*/
exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Min_CBRQ:=to_date('2003-12-3 05:12:04','yyyy-mm-dd HH24:MI:SS');
select count(*) into v_count from tameter_rt;
/*如果有数据,则计算*/
if v_count <>0 then
CLJS_Ameter_RT_prepare;
CLJS_Prepare;
select distinct max(CBRQ),min(CBRQ) into Max_CBRQ,Min_CBRQ from tameter_rt;
v_CBRQ:=Min_CBRQ;
while v_CBRQ<Max_CBRQ loop
CLJS_Main(v_CBRQ);
v_CBRQ:=v_CBRQ+15/(24*60);
end loop;
/*计算完成后电表数据存档*/
Ametdata_To_Arch;
else
/*如果没有数据,则不计算*/
null;
end if;
tmpVar := 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END Auto_CLJS;/
exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
或者
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
可是编译有错
exec alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';改为:
lv varchar2(100);
lv :='alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';
execute immediate lv;
你可以跟踪那个时间字段:
dbms_output.put_line(to_char(Min_CBRQ,'YYYY-MM-DD HH24:MI:SS'));
不过我想可不可以在数据库库设定某个参数来解决这个问题呢?
要不然,在每一过程中都写这几行代码,这不太好吧!
我明白了:是我的Toad设定有问题!