将汉字转为全拼或返回拼音首字母的函数
最近itpub上有很多关于汉字转拼音的问题,正好今晚有兴致就整理了一下。create or replace type spell_code as object(spell varchar2(10),code number);create or replace type t_spellcode is table of spell_code;--返回拼音与代码的对应关系create or replace function f_getSpellcode return t_spellcode PipelinedisBeginPIPE Row(spell_code('a', -20319)); PIPE Row(spell_code('ai', -20317)); PIPE Row(spell_code('an', -20304)); PIPE Row(spell_code('ang', -20295)); PIPE Row(spell_code('ao', -20292)); PIPE Row(spell_c
一个可以提取汉字的函数
此函数引自itpub,原文http://www.itpub.net/847680.html该函数只适用于 数据库字符集是 ZHS16GBK的,且只提取 6763个简体汉字,也就是一二级汉字但是实际上编码的判断适用于 GB18030, ZHS16GBK, ZHS16CGB231280, GB 13000.1/ISO 10646.1等标准,这些标准对于简体汉字的编码都是一样的写一函数,准确地判断字段是否含有汉字或者提取汉字等 从表里提取汉字, 需要考虑字符集, 不同的字符集汉字的编码有所不同这里以GB2312为例, 写一函数准确地从表里提取简体汉字.假设数据库字符集编码是GB2312, 环境变量(注册表或其它)的字符集也是GB2312编
一个利用substr后转换成number出错的问题
此问题总结自itpub,原文链接http://www.itpub.net/873682.html引入问题SQL> select cashier_no,sum(substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)) mintus from invoice_timewhere cashier 2 _no=112group 3 by cashier_no;CASHIER_NO MINTUS---------- ----------112 9117SQL> select cashier_no,sum(substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)) mintus from invoice_time2 group by cashier_no;ERROR:ORA-01722: invalid numberno rows selected我想问一下,下面这条语句是那里错了??为了分析问题,我们测
利用utl_file读写文件
利用utl包来读写文件需要先设置文件目录已sys用户登录CREATE DIRECTORY recv_area AS 'd:test' ;CREATE DIRECTORY send_area AS 'd:test' ;这样就创建了目录,下面将对此目录的读写权限授予指定的用户GRANT READ,WRITE ON DIRECTORY recv_area TO hanjs;GRANT READ,WRITE ON DIRECTORY send_area TO hanjs;--GRANT EXECUTE ON utl_file TO hanjs;以hanjs登录,进行测试。确认目录设置信息SELECT * FROM ALL_DIRECTORIES;1 SYS RECV_AREA d:test2 SYS SEND_AREA d:test--写文件的例子CREATE OR REPLACE PROCEDURE CREATE_DIR_WRITE_SAMPLE
oracle中trigger的使用
理论知识:Basic Trigger SyntaxBelow is the syntax for creating a trigger in Oracle (which differs slightly from standard SQL syntax): CREATE [OR REPLACE] TRIGGER <trigger_name> {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name> [REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]] [FOR EACH ROW [WHEN (<trigger_condition>)]] <trigger_body>Some important points to note: You can create only BEFORE and AFTER triggers for tables. (INSTEAD OF
socket应用示例
在使用中,都用约定使用数据的传输格式等等。见代码Socket socket = new Socket();//new a socket clientSocketAddress host = new InetSocketAddress(InetAddress.getLocalHost(),5678);socket.connect(host);//to connect the hostsocket.setSoTimeout(60000);//设置成60秒PrintWriter out=new PrintWriter(socket.getOutputStream());//获得输出流,写入请求信息out.print(functionCode+len+cardInfo+'');out.flush();//一定要有BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获得服务器
关于hashmap的遍历问题
听我们的支持说遍历hashmap使用entryset快些,因大部分都是用keyset遍历的,也没有去想那么多。今天研究了一下,果然差了很多。见示例,只是简单的hashmap信息。不多说了,大家把这个类在本地运行下,很容易看到结果。import java.util.HashMap;import java.util.Iterator;import java.util.Calendar;public class HashMapTest {public static void main(String[] args) {HashMap hashmap = new HashMap();for(int i=0;i<1000;i++){hashmap.put(""+i,"hello");}long bs = Calendar.getInstance().getTimeInMillis(
使用XMLELEMENT构建xml信息
目前做个项目中有个接口,接口约定格式为xml,最初我们支持是这样处理的:把查询出来的记录在前台通过dom4j来构建xml信息。后来我通过oracle提供的XMLELEMENT函数来在数据库中构建了,下面把使用方法介绍一下,希望对有这样需求的朋友有帮助!准备测试数据:create table teacher (id varchar2(10),name varchar2(20),remark varchar2(50));create table course (id varchar2(10),name varchar2(50),tid varchar2(10));insert into teacher values ('101','张老师','数学专业硕士);insert into teacher('102','王老师','英语专业硕士');in
分析函数——rollup
原文出处(http://www.itpub.net/showthread.php?threadid=704960&pagenumber=)有一张表test 如下, (NO 学生编号 ,cj 成绩)NO name KM CJ001 张三 语文 80 001 张三 数学 86 001 张三 英语 75 002 李四 语文 78 002 李四 数学 85 002 李四 英语 78 写了以下语句来算每项个科目的总分,select decode(grouping(name),1,'总分',name) 姓名, sum(decode(km, '数学',cj,0)) 数学,sum(decode(km, '英语',cj,0)) 英语, sum(decode(km, '语文',cj,0)) 语文,sum(cj) 总成绩 from test group by rollup(name)结果如下:姓名 数学 英语 语文 总
关于数字求积、求和的处理
1、数字求积(原文处理http://www.itpub.net/434561.html)我们有时可能会有这样的需求,一表A结构大致如下ID QTY1 22 43 64 5要求能够得到QTY字段的乘积2*4*6*5,利用sql如何实现?oldwain是这样处理的,完全利用数学的函数知识解决了。看来要好好温习数学了,呵呵!运用一下数学知识, 可以这样简化:a * b * c = power(10, log(10, a) + log(10, b) + log(10, c)测试数据:create table t (id number, qty number);insert into t values(1, 2);insert into t values(2, 4);insert into t values(3, 6);insert into t values(4, 5);Sele
oracle中几个特殊的函数
1、全角转办角函数 TO_SINGLE_BYTESQL> select TO_SINGLE_BYTE('oracle') from dual;TO_SINGLE_BYTE('ORACLE')------------------------------oracle2、数字转英文,利用to_char、to_dateSQL> select to_char(to_date('12345','J'),'Jsp') en from dual;en----------------------------------------Twelve Thousand Three Hundred Forty-Five不过有限制:一是长度的限制,二是不能转换带小数的SQL> select to_char(to_date('88888882345','J'),'Jsp') from dual;select to_char(to_date('88888882345','J'),'Jsp') f
巧妙的使用decode函数
我们会经常有这样的需求,就是能不能把行转换成列。下面介绍下如何使用decode函数来实现。1、例如有这样一张表:model item timeA1 B1 30A1 B2 40A2 B1 50A2 B2 60想实现这样的效果,如何实现呢? B1 B2A1 30 40A2 50 60select model,sum(decode(item,'B1', time)) B1,sum(decode(item,'B2', time)) B2from table_namegroup by model;model B1 B2A1 30 40A2 50 602、有表A, 包含 ply_no,ins_cde 字段,里面有数据 ply_no ins_cde2006 10012006 1002
oracle中job的使用
一、设置初始化参数 job_queue_processes sql> alter system set job_queue_processes=n;(n>0) job_queue_processes最大值为1000 查看job queue 后台进程 sql>select name,description from v$bgprocess; 二,dbms_job package 用法介绍 包含以下子过程: Broken()过程。 change()过程。 Interval()过程。 Isubmit()过程。 Next_Date()过程。 Remove()过程。 Run()过程。 Submit()过程。 User_Export()过程。 What()过程。 1、Broken()过程更新一个已
分析函数——avg、sum和count
下面通过一个简单的例子,来理解下分析函数中sum、avg和count的用法。需求:计算员工表中各个部门每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数.分析:一要按部门分组,可以按雇佣日期来排序 二设置开窗窗口的大小,ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING这样就可以实现了,为了标识出平均数是如何算出来的,以便更好的理解分析函数。SQL> SELECT deptno, ename, hiredate, sal, 2 AVG(sal) OVER (PARTITION BY deptno ORDER BY hiredate 3 ROWS BETWEEN 1 PRECEDING AND 1
字符串分割的处理
下面是转自itpub上zhouwf0726的一篇文章上对于字符串的处理,但是我个人还是认为写一个字定义函数来处理比较通用。/*怎样支掉字符串中逗号间重复的字符 如 ',1,2,5,9,1,2,5,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,'怎样支掉字符串中逗号间重复的字符,并将字符升序排列,得到',1,2,3,5,9,'百思不得其解,是高手的试一下。解答:select col from(select sys_connect_by_path(col,',')||',' col,level from(select col,row_number() over(order by rownum) rn from (select distinct substr(col,instr(col,',',1,rownum
分析函数——lead与lag
lag(expression<,offset><,default>)函数可以访问组内当前行之前的行,而lead(expression<,offset><,default>)函数则正相反,可以反问组内当前行之后的行.其中,offset是正整数,默认为1.因组内第一个条记录没有之前的行,最后一行没有之后的行,default就是用于处理这样的信息,默认为空.注意:这2个函数必须指定 order By 字句.SQL> select id,name,salary,lag(salary) over (order by salary) lag,2 lead(salary) over (order by salary) lead from emp;ID NAME SALARY LAG LEAD---------- ----------
要善于利用pipelined function
Pipelined functions are useful if there is a need for a data source other than a table in a select statement.当不需要利用表来存储而仅仅是一个结果集的话就可以使用这个函数了。问题的提出:itpub xxxzheng表table 1DATE2007-01-012007-01-02.........2007-01-30表table2empId datejc001 2007-01-01jc001 2007-01-02jc001 2007-01-03jc001 2007-01-08jc001 2007-01-20jc002 2007-01-01jc002 2007-01-02jc002 2007-01-02jc003 2007-01-15jc002 2007-01-30 ....................我想的结果是连个表进行连接查询得到DATE ID 2007-01-
translate与replace
Oracle/PLSQL: Translate FunctionIn Oracle/PLSQL, the translate function replaces a sequence of characters in a string with another set of characters. However, it replaces a single character at a time. For example, it will replace the 1st character in the string_to_replace with the 1st character in the replacement_string.Then it will replace the 2nd character in the string_to_replace with the 2nd character in the replacement_string, and so on.The syntax for the translate function is:translate( st
分析函数——first_value()与last_value()
刚开始接触分析函数,总有些头绪梳理不清楚,下面是引用了itpub上nyfor的一些。问题的提出:在使用first_value()或last_value()的时候,同时使用partition和order by会得不到想要的效果。SQL> select deptno,empno,ename,sal,2 last_value(sal) over( partition by deptno )3 from emp;DEPTNO EMPNO ENAME SAL LAST_VALUE(SAL)OVER(PARTITIONB------ ----- ---------- --------- ------------------------------10 7782 CLARK 2450.00 130010 7839 KING 5000.00 130010 7934 MILLER 1300.00 130020 7369 SMITH 800.00 297520 7876 ADAM
分析函数——rank()、dense_rank()与row_number()
在itpub上经常会看到这样的貌似的问题......问题的提出(yuanfang2008)在ORACLE如何用SQL实现最接近某一个值且大于等于这个值的一条记录.例如有如下记录:COL1 COL2 COL3A 1 2007/1/29 上午 06:36:43A 2 2007/1/30 下午 04:06:39B 3 2007/1/29上午04:13:55B 4 2007/1/28下午11:34:41C 5 2007/1/30下午04:06:39C 6 2007/1/29上午05:40:32D 7 2007/1/29上午05:22:17D 8 2007/1/28下午11:34:43A 9 2007/1/30下午03:59:38要求以COL1分组,取出每一分组内,COL3最接近于给出值且大于等于给出值的相应的COL2的值.例如:当我给出时间为2007/1/30 下午