时间戳,就把它理解为一个时间点,就是当一件事发生时,给它一个时间标记,记录此时的时间。
这句话意思就是,对变量v_timestamp赋初值为当前系统时间sysdate时间戳。
⑵ db2 存储过程 异常处理
存储过程异常的处理:
DECLARE handler-type HANDLER FOR condition handler-action
异常处理器类型(handler-type)有以下几种:
CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句。
EXIT 在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
UNDO 在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类。预定义的3种异常如下所示:
NOT FOUND 标识导致SQLCODE值为+100或者SQLSATE值为02000的异常。这个异常通常在SELECT没有返回行的时候出现。
SQLEXCEPTIOIN 标识导致SQLCODE值为负的异常。
SQLWARNING 标识导致警告异常或者导致+100以外的SQLCODE正值的异常。
如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下一个语句。如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,并且会将控制流返回调用者。
以下示例声明了两个异常处理器。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作。
清单3:异常处理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,然后再为这个定制异常声明处理器。语法如下:
清单4:定制异常处理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义。注意在执行符合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数。
通常,会为存储过程定义一个执行状态的输出参数(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --异常的声明
--异常的处理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:产品实例关联客户过程出错!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;
⑶ sql server中时间戳timestamp的使用
显示数据时先取出timestamp到变量
更新,删除操作时先比较变量和现在的timestamp, 一样则操作
什么问题,转成byte[]
⑷ 表中有一个字段名称是timestamp时,如何处理在编写触发器和存储过程的报错问题
我的触发器这么写?create or replace trigger trg_pcp_item after insert on pcp_item for each rowbegin end trg_pcp_item; 它在【on pcp_item】就已经报错了。。
⑸ jsp如何向oracle存储过程传递日期类型的参数
java.util.Date date;
Timestamp timestamp = resultSet.getTimestamp(i);
if (timestamp != null)
date = new java.util.Date(timestamp.getTime()));
解释一下:首先从结果集中拿到timestamp,然后作为参数传入date中,就变成java.util.Date类型
然后转成你想要的格式就ok了,一般用
DateFormat df=new SimpleDateFormat(format);
String result=df.format(date );
⑹ db2的过程中怎样写异常处理
CREATEPROCEDUREschema_name.proc_name
(
INparm1INTEGER,OUTparm2VARCHAR(1000)
)
SPECIFICPROC_YYZY_XYKCJZ
LANGUAGESQL
NOTDETERMINISTIC
NOEXTERNALACTION
MODIFIESSQLDATA
CALLEDONNULLINPUT
LB_MAIN:BEGINATOMIC
/*DECLARESYSTEMVARIABLES*/
DECLARESQLSTATECHAR(5);
DECLARESQLCODEINTEGER;
DECLAREV_SQLSTATECHAR(5);
DECLAREI_SQLCODEINTEGER;
DECLARESQL_CUR_AT_ENDINTEGER;
DECLARESQL_STMTVARCHAR(2000);
/*DECLAREUSER-DEFINEDVARIABLES*/
--DECLAREV_SEPARATORVARCHAR(50)DEFAULT',';
/*DECLARESTATICCURSOR*/
--DECLAREC1CURSOR/*WITHRETURN*/FOR
--SELECTcolumn1,column2...
--FROMtable_name
--ORDERBYcolumn1,column2...
--;
/*DECLAREDYNAMICCURSOR*/
--DECLAREC2CURSORFORS2;
/*DECLAREEXCEPTIONHANDLE*/
--异常声明
BEGIN
VALUES(SQLCODE,SQLSTATE)INTOI_SQLCODE,V_SQLSTATE;
SETparm2=VALUE(parm2,'')
||'SYSTEM:SQLCODE='||RTRIM(CHAR(I_SQLCODE))
||',SQLSTATE='||VALUE(RTRIM(V_SQLSTATE),'')||';'
;
END;
_CUR_AT_END=1;
/*DECLARETEMPORARYTABLE*/
--
--(
--columnINTEGER
--);
/*SQLPROCEDUREBODY*/
ENDLB_MAIN;
上面的是我常用的一个存储过程的代码样本
异常处理需要加在游标声明之后,临时表声明之前(见DECLARE UNDO HANDLER FOR SQLEXCEPTION部分)
常用的异常处理方式分为三种:UNDO(回滚)、EXIT(退出)、CONTINUE(继续执行)
DECLAREUNDO|EXIT|CONTINUEHANDLERFOR
异常处理的对象可以为针对指定的sqlstate代码
DECLAREUNDO|EXIT|
也可以针对某些condition,如sql异常,sql警告,以及游标末尾
DECLAREUNDO|EXIT||SQLWARNING|NOTFOUND
异常处理的内容 ,可以是一些回滚,提交语句,也可以是日志记录等
DECLAREUNDO|EXIT|
BEGIN
--异常处理内容
END;
引用资料:http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0004239.html
⑺ postgresql 存储过程的事务处理
一个PostgreSQL存储过程的例子
需求:
给出如下条件进行批处理编排
- 开始日期时间
- 重复间隔(分钟)
- 重复次数
要求在档期内重复安排节目播出, 比如: 2003.01.01 08:00 开始每隔240分钟播出一次, 一共播出100次
数据库表格(CO_SCHEDULE)
------------------------------
N_PROGID INT
DT_STARTTIME TIMESTAMP
DT_ENDTIME TIMESTAMP
存储过程的实现:
create table co_schele(n_progid int,dt_starttime timestamp,dt_endtime timestamp);
//创建函数:
create function add_program_time(int4,timestamp,int4,int4,int4) returns bool as '
declare
prog_id alias for $1;
ration_min alias for $3;
period_min alias for $4;
repeat_times alias for $5;
i int;
starttime timestamp;
ins_starttime timestamp;
ins_endtime timestamp;
begin
starttime :=$2;
i := 0;
while i<repeat_times loop
ins_starttime := starttime;
ins_endtime := timestamp_pl_span(ins_starttime,ration_min || ''mins'');
starttime := timestamp_pl_span(ins_starttime,period_min || ''mins'');
insert into co_schele values(prog_id,ins_starttime,ins_endtime);
i := i+1;
end loop;
if i<repeat_times then
return false;
else
return true;
end if;
end;
'language 'plpgsql';
//执行函数:
select add_program_time(1,'2002-10-20 0:0:0','5','60','5');
//查看结果:select * from co_schele;
n_progid | dt_starttime | dt_endtime
----------+------------------------+------------------------
1 | 2002-10-20 00:00:00+08 | 2002-10-20 00:05:00+08
1 | 2002-10-20 01:00:00+08 | 2002-10-20 01:05:00+08
1 | 2002-10-20 02:00:00+08 | 2002-10-20 02:05:00+08
1 | 2002-10-20 03:00:00+08 | 2002-10-20 03:05:00+08
1 | 2002-10-20 04:00:00+08 | 2002-10-20 04:05:00+08
ps:
1.数据库一加载 plpgsql语言。如没有,
su - postgres
createlang plpgsql dbname
2.至于返回类型为bool,是因为我不知道如何让函数不返回值。等待改进。
⑻ mysql存储过程怎么把日期时间转时间戳
UNIX_TIMESTAMP
SELECT UNIX_TIMESTAMP('2015-04-29')
⑼ ORACLE数据库. PL/SQL的时间戳
Oracle
Databse
9i数据库引入了一种新特性,可以存储时间戳。时间戳可以存储世纪、4位年、月、日、时(以24小时格式)、分、秒。与DATE类型相比,时间戳具有以下优点:时间戳可以存储秒的小数位 时间戳可以存储时区。下面介绍时间戳类型。 时间戳类型类
型说
明TIMESTAMP[(seconds_precision)]存储世纪、4位的年、月、日、时(以24小时格式)、分和秒。seconds_precision为可选参数,用于指定精度,该参数为一个整数,范围从0~9,默认值为9;意思是表示秒的数字的小数点右边可以存储9位数字。如果试图在秒的小数中保存超过TIMESTAMP存储精度的数字,那么该小数将被取整TIMESTAMP[(seconds_precision)]WITH
TIME
ZONE扩展TIMESTAMP,用于存储时区TIMESTAMP[(seconds_precision)]WITH
LOCAL
TIME
ZONE扩展TIMESTAMP,将给定的时间值转换成数据库的本地时区。转换过程称为时间值的规格化(normalizingv_timestamp
:=
to_timestamp(to_char(sysdate,
'yyyy-mm-dd
hh24:mi:ss'),'yyyy-mm-dd
hh24:mi:ss.ff');
我认为这句话的意思就是把系统时间转化为时间戳,目的是使时间更精确。