Oracle列转行的一种实现方法

在做OA表单开发的时候,经常会碰到一个字段用逗号或者其他分隔符存多个信息,例如一张表单中有一个附件控件,存储了多个附件的ID,中间用逗号隔开,这时候我们如果要通过附件ID抓取附件详细信息,如果使用LIKE,效率不高,因此需要将这个字段通过逗号分隔行转列。

注:该方法是在Oracle数据库中实现的,SQL Server或者Mysql 需要进行修改。

继续阅读Oracle列转行的一种实现方法

【ORA-02049】超时分布式事务处理等待锁 解决方法

1、以sys用户登录数据库查询死锁

SELECT
	USERNAME,
	LOCKWAIT,
	STATUS,
	MACHINE,
	PROGRAM
FROM
	V$SESSION
WHERE
	SID IN (
		SELECT
			SESSION_ID
		FROM
			V$LOCKED_OBJECT
	);

2、使用以下语句查询被死锁的语句

SELECT
	SQL_TEXT
FROM
	V$SQL
WHERE
	HASH_VALUE IN (
		SELECT
			SQL_HASH_VALUE
		FROM
			V$SESSION
		WHERE
			SID IN (
				SELECT
					SESSION_ID
				FROM
					V$LOCKED_OBJECT
			)
	);

3、使用以下语句查找被死锁的进程

SELECT
	S.USERNAME,
	L.OBJECT_ID,
	L.SESSION_ID,
	S.SERIAL#,
	L.ORACLE_USERNAME,
	L.OS_USER_NAME,
	L. PROCESS
FROM
	V$LOCKED_OBJECT L,
	V$SESSION S
WHERE
	L.SESSION_ID = S. SID;

4、使用以下语句kill死锁的进程

ALTER SYSTEM KILL SESSION 'sid,serial#';
--(其中sid=l.session_id)
--如:SQL> alter system kill session '24,37522'