十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
接收字符返回字符或数值时可以使用dual伪表
目前累计服务客户上千多家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都网站建设、成都网站制作、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。创新互联公司始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。
1、把小写字符转换成大写
select supper(“smi”) form dual
2、把大写转换成小写
lower(“SMI”)
3、首字母大写
initcap(“smi”)
4、字符串的连接可以使用concat,也可以使用 建议使用
concat(“hello”“world”) 结果为helloworld
5、字符串的截取,使用substr,第一个参数为字符串,第二个参数是索引,第三个参数结束索引(开始索引使用0和1效果一样)
substr(hello,0,3) 结果为hel
6、获取字符串长度
length(“hello”)
7、字符串替换,第二个参数为被替换的字符串,第三个是替换的字符串
replace(“hello”,“l”,“x”) 结果为hexxo
1、四舍五入函数ROUND()
默认取整,可以指定保留位数
round(12.523) 结果为13
round(12.537,2) 结果为12.54
2、取整TRUNC
默认全部去掉小数,可以指定位数
trunc(12.789) 结果为12
3、取余数MOD
mod(10,3) 结果为1
oracle中提供了很多和日期相关的函数,包括日期的加减
日期 - 数字 =日期
日期 - 日期 = 数字(天)
1、如:查询员工进入公司的走数
(sysdate - 入职日期)/7
注:当前日期查询select sysdate form dual
2、查询所有员工进入公司的月数
获取两个时间段的月数使用months_between(sysdate,入职日期)
3、获取几个月后的日期:add_months()
如:获取员工三个月后的日期
add_months(sysdate,3)
4、如求出下星期一是什么时候
指定给出下次某日期数next_date()
next_date(sysdate,“星期一”)
5、求日期的最后一天last_day()
求出本月的最后一天
last_day(sysdate)
1、to_char字符串转换函数
如:将所有员工的入职日期的年、月分开
注:在划分时需要通配符
年:yyyy 月:mm 日:dd
时:HH 分:mi 秒:ss
定义时间格式
to_char(sysdate,“yyyy-mm-dd HH24:mi:ss”)
在10以下的月数前面会默认加上前导零,去除加上fm
to_char(sysdate,“fmyyyy-mm-dd HH24:mi:ss”)
to_char还可以给数字做格式化
如将员工的工资按三位“,”分隔
to_char(工资,“99,999”) 9代表数字
如果想在钱上加上国家符号
美元使用
中文使用l
to_char(工资,“99,999”)
to_char(工资,“l99,999”)
2、to_number数值转换函数,将字符串转换成数值
to_number(“10”) +to_number(“10”)
3、to_date日期转换函数,将字符串数据转换成日期类型
to_date(“1997-05-12”,“YYYY-mm-dd”) 1997/05/12
1、空值处理 nvl
如果在查询的时候存在空值的情况可以使用
nvl(comm,0) 当comm的列值为空时,用0代替
2、decode函数
该函数类似于if ...else if ...else
语法:decode(列名/值,search1,result1,search2,result2,default)
decode(中国,中国,我是中国,美国,我是美国,其他)
如果为中国返回我是中国,为美国返回我是美国,为其他字符则返回其他。
3、case when 与decode差不多
语法 case when city=中国 then 我是中国
when city=美国 then 我是美国
else 其他
oracle中的Function有两种,一种是系统内置的函数(直接拿来用就行),一种是自定义的(自己写的完成特定功能的)。function可以在DML语句中执行。如select upper('AaBbCcDd') '大写' from dual 其中upper就是系统自带的函数,是把参数中的字符串变成大写字符。
自定义函数的语句格式是:
create or replace function 函数名 return 返回值类型 is [声明部分]
begin 主体语句; return 结果; [exception 异常处理部分;] end;
调用:select 函数名 from dual;
或者像执行procedure一样调用也可以 begin 函数名; end;
外层管道函数:
CREATE OR REPLACE FUNCTION F_CAGOODAVG_D_ZH_AQI (List varchar2,p_StartDate varchar2,p_EndDate varchar2,
p_cal number,p_MethodCode number,usercode varchar2)
RETURN TCA_GETSUBGOODAVG_D_AQI PIPELINED
...
end F_CAGOODAVG_D_ZH_AQI;
在ORACLE中,函数的调用方式有位置表示法调用函数、命名表示法调用函数、混合使用位置表示法和命名表示法调用函数、排除表示法、ql调用表示法 --混合表示法。
甲骨文股份有限公司(Oracle)是全球大型数据库软件公司,总部位于美国加州红木城的红木岸。在2008年,甲骨文股份有限公司是继Microsoft及IBM后,全球收入第三多的软件公司。Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站也选用了Oracle系统。甲骨文股份有限公司于1989年正式进入中国,在北京、上海、广州和成都均设立了分支机构。
提示已经讲得清楚: 表TEST.TB_CLEARING发生了变化, 触发器/函数不能读它.
在使用oracle行级(for earch row设定)触发器时要注意:
1.触发器不可以执行COMMIT、ROLLBACK或SAVEPOINT语句,而且不可以调用执行这些语句之一的函数或过程。
2.触发器不可以声明long或LONG RAW变量。
3.触发器不可以在定义它的表上执行DML操作(行级触发器)
你在该触发器中要读取触发器器所在的表的数据(数据DML操作), 这是不允许的.
你将行级触发改成表级触发, 即去掉for each fow试试. 反正在你的语句中也没有使用到NEW, OLD这两个行级触发器新值, 旧值记录.
调用oracle存储过程用begin...end的方式。
基本语法:
begin 存储过程名(参数1,参数2……);--如果无参数则省略括号及括号内部分end;
如,有存储过程:
create or replace procedure p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);begin v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); select 'badkano' into v_str from dual; v_endtime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); dbms_output.put_line('开始时间为:'||v_begintime); dbms_output.put_line('结束时间为:'||v_endtime);end;
执行:begin p_test;end;