文档介绍:YUNHE ENMO (BEIJING) TECHNOLOGY CO.,LTD
Think Different
杨廷琨( yangtingkun)
mail:@
blog:
2012
云和恩墨成就所托
云和恩墨成就所托
个人介绍
杨廷琨(yangtingkun)
Oracle ACE
ITPUB数据库管理区版主
ACOUG核心会员
参与编写《Oracle数据库性能优化》、
《Oracle DBA手记》和《Oracle DBA手记3》
十二年的一线DBA经验
个人BLOG中积累了2500篇原创技术文章
云和恩墨资深技术经理
2012
云和恩墨成就所托
云和恩墨成就所托
Oracle能做什么
• Thomas Kyte:在Oracle中,很少会说不能做
什么,而是你会有多少种选择来实现这个功能。
•我说:如果某个功能你在Oracle中无法实现,
那么并不意味着在Oracle中无法实现,而多半
是你对Oracle的功能还不是很了解。
2012
云和恩墨成就所托
云和恩墨成就所托
我们能做什么
• Oracle数据库相关需求:
•现有功能就能提供的超过60%。初级DBA
•现有功能进行简单封装的30%。中级DBA
•现有功能难以满足的不到10%。高级DBA
2012
云和恩墨成就所托
云和恩墨成就所托
Think Different
•发挥创造力解决Oracle中难以解决的问题
•想做的人会找个方法
•不想做的人找个借口
2012
云和恩墨成就所托
云和恩墨成就所托
Oracle难以实现的原因
•数据库功能的限制条件
•数据库版本的限制条件
•数据库没有提供的功能
2012
云和恩墨成就所托
云和恩墨成就所托
功能限制——LONG字段后添加字符
需求
查询LONG字段并添加字符串。
SELECT LONG_COL || ‘1234’ FROM T;
问题
LONG类型无法使用||添加字符
2012
云和恩墨成就所托
云和恩墨成就所托
功能限制——LONG字段后添加字符
解决方案
–PL/SQL实现——处理长度受限
–外部程序——实现复杂度高
–利用LOB进行转化
2012
云和恩墨成就所托
云和恩墨成就所托
功能限制——LONG字段后添加字符
SQL> CREATE GLOBAL TEMPORARY TABLE T_LONG_LOB
2 (ID NUMBER, COL CLOB);
SQL> CREATE OR REPLACE FUNCTION F_LONG(P_ID IN NUMBER) RETURN
CLOB AS PRAGMA AUTONOMOUS_TRANSACTION;
2 V_RESULT CLOB;
3 BEGIN
4 INSERT INTO T_LONG_LOB SELECT ID, TO_LOB(COL)
5 FROM T_LONG WHERE ID = P_ID;
6 SELECT COL || ‘1234’ INTO V_RESULT
7 FROM T_LONG_LOB WHERE ID = P_ID;
MIT;
9 RETURN V_RESULT;
10 END;
11 /
SQL> SELECT F_LONG(ID) FROM T_LONG;
2012
云和恩墨成就所托
云和恩墨成就所托
功能限制——对LONG字段进行搜索
需求
对表中的LONG字段进行查询限定条件。
问题
–LONG字段类型字段无法出现在WHERE语句中
–LONG字段类型也无法创建索引
2012
云和恩墨成就所托
云和恩墨成就所托