学习 了一下Oracle数据库,在这里做一下记录
Oracle常用内置函数
--首字母大写
select initcap('iloveChina') from dual;
--转换为小写字母
select lower('ILOVECHINA') from dual;
--转换为大写字母
select upper('ilovechina') from dual;
--从左输入的字母开始截取
select ltrim('iloverchina','i') from dual;
--从右边开始,截取给定的字符,无论出现多少次
select rtrim('vipppppipippppp','ip') from dual;
--进行匹配,进行相应的字符进行匹配,然后替换
select translate('jack','abcd','1234')from dual;
--替换指定的字符
select replace('ilovejava','love','hate') from dual;
--返回指定的查找子串的位置
select instr('ilovejava','love') from dual;
--截取字符串 从第一个参数是要截取的字符串,第二个参数是指定位置开始,第三个是截取的长度
select substr('ilovejava',2,4) from dual;
--连接字符串,只能拼接一次
select concat(concat('i','love'),'java') from dual;
--将当前时间转换为字符类型
select to_char(sysdate,'yyyy-MM-dd') from dual;
--返回两个日期之间相差月份
select months_between(to_date('2020-1-20','yyyy-mm-dd'),sysdate) from dual;
--当前日期加上一个月,返回新日期
select add_months(sysdate,1) from dual;
--返回当前日期的下一个星期几
select next_day(sysdate,'星期五') from dual;
--若exp1为空,则返回exp2 nvl(exp1,exp2)
select userid,uname,upwd,nvl(usex,'未知') from t_user t;
--nvl2(exp1,exp2,exp3)
select userid,uname,upwd,nvl2(usex,'男','1'),uage from t_user t;
Oracle中的关联查询有两种写法
--关联查询
select * from t_gust g,t_role r where g.rid = r.rid;
--内联查询
select * from t_gust g inner join t_role r on g.rid = r.rid;
--外连接:左外连接,以左表为准,
select * from t_gust g left join t_role r on g.rid = r.rid;
select * from t_gust g , t_role r where g.rid = r.rid(+);
--外连接:右外连接,以右表为准,
select * from t_gust g right join t_role r on g.rid = r.rid;
select * from t_gust g , t_role r where g.rid(+) = r.rid;
Oracle中的分页查询,根据伪列rownum进行查询
例:十一条记录,分为四页,查询第三页 数据
-- 根据id排序,然后使用行id即rownum进行查询,起始位置>pagesize*(page-1),结束位置<=(pasize*page)
select * from
(select t1.*,rownum rn from (select * from t_user t order by userid) t1 where rownum <=9) t2
where t2.rn > 6;
;
Oracle中的存储过程
与mysql的存储过程没有太大的差别,只是语法不同。在Oracle中将存储过程分包进行存储,则有包头和包体,包头就是该存储过程的声明,包体是该存储过程的具体实现,PLSQL的图形化界面中通过测试方法调用存储过程,mysql调用存储过程需要使用call方法调用;
例如:创建一个存储过程,将存储过程存放到packet目录下,则具体的代码实现为
-创建存储过程的包头
--创建一个包
create or replace package pck1301
as
--声明游标
type refcursor is ref cursor;
--添加
procedure add_User(
user_id in number,
u_name in varchar2,
u_pwd in varchar2,
u_sex in char,
u_age in number,
msg out varchar2
);
--修改
procedure update_User(
user_id in number,
u_name in varchar2,
u_pwd in varchar2,
u_sex in char,
u_age in number,
msg out varchar2
);
--删除
procedure delete_user(
user_id in number
,msg out varchar );
--模糊查询
procedure query_all(
name in varchar,
p_list out refcursor
);
--查询全部
procedure get_all(
p_list out refcursor
);
end pck1301;
创建存储过程的具体实现(包体)
create or replace package body pck1301
as
--定义添加的存储过程
procedure add_User(
user_id in number,
u_name in varchar2,
u_pwd in varchar2,
u_sex in char,
u_age in number,
msg out varchar2
)
is
--定义一个标志判断id是否为空
cnt number(4):= 0;
begin
select count(*) into cnt from t_user where userid=user_id;
if cnt>0 then
msg := '用户已存在,插入失败!';
else
insert into t_user(userid,uname,upwd,usex,uage) values(user_id,u_name,u_pwd,u_sex,u_age);
commit;
msg := '插入成功';
end if;
exception
when others then
msg := '插入失败';
end add_User;
procedure update_User(
user_id in number,
u_name in varchar2,
u_pwd in varchar2,
u_sex in char,
u_age in number,
msg out varchar2
) is
begin
update t_user set uname =u_name,upwd=u_pwd,usex=u_sex,uage=u_age where userid=user_id;
commit;
msg := '修改成功!';
exception
when others then
msg := '修改失败!';
end update_User;
--定义删除的存储过程
procedure delete_user(
user_id in number
,msg out varchar ) is
--定义一个标志判断id是否为空
cnt number(4):= 0;
begin
select count(*) into cnt from t_user where userid=user_id;
if cnt>0 then
delete from t_user where userid = user_id;
commit;
msg := '删除成功';
else
msg := '用户不存在,删除失败!';
end if;
exception
when others then
msg := '删除失败';
end delete_user;
--定义查询的存储过程
procedure query_all(
name in varchar,
p_list out refcursor
) is
begin
open p_list for
select * from t_user where uname like '%'||name||'%';
end query_all;
--查询全部
procedure get_all(
p_list out refcursor
)
is
begin
open p_list for
select * from t_user;
end get_all;
end pck1301;