1、decode函数:
SELECT checkup_type, DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup;
DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下: DECODE(input_value,value,result[,value,result…][,default_result]);
其中:input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应result 是一组成序偶的结果值default_result 未能与任何一序偶匹配成功时,函数返回的默认值下面的例子说明了,如
何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
2、nvl函数的用法:
如果你某个字段为空,但是你想让这个字段显示0nvl(字段名,0),就是当你选出来的时候,
这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3……
NULL指的是空值,或者非法值。
NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1
3、oracle的查询必须是 select ... from ...成对出现:
查询单行的时候可以用dual代替,dual表在系统中只有一行;
例如:获取系统时间;
select sysdate from dual
4、oracle查询结果多行用逗号拼接:
SELECT WM_CONCAT(GOODSTYPENAME) FROM TB_SYS_PRODUCT_FORBIDGOODSTYPE fib
LEFT JOIN TB_SYS_GOODSTYPE ty dstypeid
WHERE fib.productid=t.productid
5、oracle递归获取所有子或者父节点:
pid为子级的父级id的字段名称
从Root往树末梢递归:获取子级
select * from temp
start with id=3 /*父级的id*/
connect by prior id = pid /*pid 子级的父级id的字段名称*/
从末梢往树ROOT递归:获取父级
select * from temp
start with id=3
connect by id = prior pid /*pid子级的父级id的字段名称*/
如果需要显示层次结构
select sys_connect_by_path(id,'/'),pid from temp
start with id=1
connect by prior id = pid
Rg:
SELECT * from tb_base_netpoint t
START WITH tpointid=74852
CONNECT BY PRIOR tpointid=t.parentnetpoint
6、oracle使用正则表达式:
替换掉大写字母:
SELECT REGEXP_REPLACE(printNo,'^[A-Z]*','') AS ISSUENO FROM TB_BASE_PRINTORDERLIST
Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
特殊字符:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 'n' 或 'r'。
'.' 匹配除换行符 n之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'*' 匹配前面的子表达式零次或多次。
'+' 匹配前面的子表达式一次或多次。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出
现m次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
正则表达式的一个很有用的特点是可以保存子表达式以后使用, 被称为Backreferencing. 允许复杂的替换能力
如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中, oracle四舍五入
缓冲区从左到右编号, 通过数字符号访问。 下面的例子列出了把名字 aa bb cc 变成
cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM dual;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'' 转义符。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
| “或”操作
7、oracle替换字母:
替换所有字母:
REGEXP_REPLACE(issueno, '^[A-Z]*', '')
8、oracle新建存储过程:
create or replace procedure Test_Get_User(Iuserid in NUMBER,tt out varchar) is
begin
select username into tt from tb_sys_user where userid=Iuserid;
--dbms_output.put_line('tt='||tt); --打印结果
end Test_Get_User;
9、PLSQL添加新链接:
1、<客户端目录>
/network/admin,在admin目录中建立a文件,
内容大致如下:demo1 = #oracle服务名
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)) #oracle服务器地址与端口 ) (CONNECT_DATA = (SERVICE_NAME = demo1) ) )
2、客户端配置:配置和移植工具——Net Manager——服务命名;
10、substr的用法:
TSG.SCHEDULEORDERNO要截取的字符串,从3开始截取,字符串的下标从1开始;
SUBSTR(TSG.SCHEDULEORDERNO, 3)
11、遍历所有数据:
for lr in(
SELECT *
from TB_FIN_CREDITORDER
WHERE 1=1
AND to_date(lr.startdate)=to_date(SYSDATE)
AND state=8
)
loop
end loop;
跳出循环:
exit when result=500;
12、C#调用执行sql插入数据返回序列号:
string str_Sql = @"begin insert into testtab(name) values('test'); select TESTTABSEQ.Currval into :ID from dual; end;";
ORAC.OracleCommand cmd= new ORAC.OracleCommand(str_acleConnection1);
ORAC.OracleParameter parm = new ORAC.OracleParameter("ID",ORAC.OracleType.Number);
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm);
acleConnection1.State == System.Data.ConnectionState.Closed)
{
acleConnection1.Open();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论