Oracle中常用系统表和视图以及常用函数

常用系统表和视图

具体的字段信息到Oracle官网去查看,上面的内容非常的详细:

NAMETYPEOWNERDescription
DBA_OBJECTSVIEWSYS当前数据库里的所有对象
USER_OBJECTSVIEWSYS当前用户拥有的所有对象(不显示OWNER字段)
ALL_OBJECTSVIEWSYS当前用户能够访问的所有对象,注意object_type 和 owner字段
DBA_TABLESVIEWSYS当前数据库里所有的关系表
ALL_TABLESVIEWSYS当前用户可访问的关系表
USER_TABLESVIEWSYS当前用户拥有的关系表
ALL_TAB_COLUMNSVIEWSYS系统视图,存放表信息(数据库名 表名,表字段名,字段类型,字段长度,默认值等)
DBA_TABLESPACESVIEWSYS数据库中的所有表空间
USER_TABLESPACESVIEWSYS当前用户可访问的表空间
DBA_INDEXESVIEWSYS当前数据库里所有的索引
ALL_INDEXESVIEWSYS当前用户可访问的索引
USER_INDEXESVIEWSYS当前用户拥有的索引,不显示OWNER字段
ALL_SOURCEVIEWSYS记录了该用户可访问的所有数据库对象的脚本信息(DDL)

常用来查数据库问题的表:

NAMEDescriptionUse
V$SQLAREA列出了共享SQL区域的统计信息,同时为每个SQL字符串保存一条记录。它提供关于内存中、已解析并准备执行的SQL语句的统计信息
V$SQL列出了没有group by操作的共享SQL区域的统计信息,同时为原始的SQL保存所有的child信息,正常情况下,当query执行完成,显示在V$SQL中的统计信息会被更新。但是,如果是一个运行长时间的查询,每5秒钟会更新一次。因此,通过这些信息可以很容易的发现那些正在长时间运行的SQL语句所造成的影响。可以使用V$SQLAREA中的SQL_ID字段来查询执行的sql信息

重要字段说明

名字字段说明
ALL_INDEXESSTATUS表示当前index的状态,VALID 或者 UNUSABLE
ALL_SOURCETYPE对象类型,如FUNCTION, JAVA SOURCE, PACKAGE, PACKAGE BODY, PROCEDURE, TRIGGER, TYPE, TYPE BODY等

常用函数

注意,下面例子中的英文单引号显示成了中文单引号,需要修改。这个是csdn显示的问题。

数值型函数

函数名描述例子结果
ABS(n)返回绝对值select ABS(-100), ABS(‘100’) from dual;100 100
MOD(n2,n1)返回n2除以n1的余数select MOD(5,2) from dual;1
ROUND(n,integer)它将参数n四舍五入成第二个参数指定的形式的十进制数。参数integer要求是整数,如果不是整数,那么它就会被自动截取为整数部分
TRUNC数值n根据integer的值进行截取,和integer的正负有关;integer要求是整数,如果不是整数,那么它就会被自动截取为整数部分;当integer为正整数,表示n将截取到integer位小数,如果integer为负数,则截取到小数点左第integer位,被截取部分用0代替

字符函数

函数名描述例子结果
||并置运算符select ‘abc’||‘def’ from dual;abcdef
lower将字符串全转为小写select lower(‘ABc’) from dual;abc
upper将字符串全转为大写select upper(‘ABc’) from dual;ABC
initcap将字符串的首字母全转为大写select upper(‘how are you’) from dual;How Are You
concat连接两个参数并返回select concat('How ', ‘are you’) from dual;How are you
substr对字符串进行截取,语法:substr(char, position, [substring_length]) 其中position为要截取字符串的开始位置,初始为1,如果该值为负,则表示从char的右边算起
length求字符串的长度select length(‘ABc’) from dual;3
instr在字符串中搜索另一个字符串select instr(‘ABc’, ‘B’) from dual;2
rpad结构rpad(expr1, n[, expr2]),在字符串expr1的右边用字符串expr2填充,直到整个字符串的长度为n为止
lpad结构lpad(expr1, n[, expr2]),在字符串expr1的左边用字符串expr2填充,直到整个字符串的长度为n为止
trimLTRIM(X[,Y]), 去掉字符串X左边的Y字符串,Y不填时,默认的是字符串X左边去空格
replace结构REPLACE(X,old,new),查找字符串X中old字符,并利用new字符替换

日期型函数

函数名描述例子结果
sysdate系统日期和时间select sysdate from dual;
systimestamp该函数没有参数,可以得到系统的当前时间,该时间包含时区信息,精确到微秒select systimestamp from dual;
dbtimezone返回数据库时区select dbtimezone from dual;
last_day返回参数指定日期对应月份的最后一天select last_day(sysdate) from dual;
next_day返回参数指定日期的下一天select next_day(sysdate) from dual;
roundROUND(r[,f])函数:将日期r按f的格式进行四舍五入。如果f不填,则四舍五入到最近的一天
truncTRUNC(r[,f])函数:将日期r按f的格式进行截取。如果f不填,则截取到当前的日期

控值处理函数

函数名描述例子结果
NVL(expr1, expr2)如果expr1的值为空值,则返回expr2的值,否则返回expr1的值(expr1和expr2的数据类型必须相同)
NVL2(expr1, expr2, expr2)上面的增强版;如果expr1的值为空值,则返回expr3的值,否则返回expr2的值(expr1为任何数据类型;而表达式expr2和expr3为除LONG数据类型外的任何数据类型)
NULLIF(expr1, expr2)比较两个表达式,如果二者相等,则返回NULL,否则返回第一个表达式的值。要求第一个表达式的值不能为NULL

特殊格式日期函数

函数名描述例子结果
Y或YY或YYY年的最后一位,两位,三位select to_char(sysdate,‘YYY’) from dual;如果是2019年,则输出 019
DDD当年第几天select to_char(sysdate, ‘DDD’) from dual;
DD当月第几天select to_char(sysdate, ‘DD’) from dual;
D当周第几天select to_char(sysdate, ‘D’) from dual;

转换函数

函数名描述例子结果
to_char将数字型或者日期型转为字符型select to_char(sysdate, ‘YYYYMMDD’) from dual;
to_date将字符型数据转化为日期型数据select to_date(‘20180101’, ‘YYYYMMDD’) from dual;
to_numberto_number(x[,f]) 可以把字符串x按照格式f进行格式化转换为数值类型结果select to_number(‘123.74’,‘999.99’) from dual

注意:其中数值的格式f可以参考下表

参数示例说明
9999指定位置返回数字
.99.9指定小数点的位置
99,9指定位置返回一个逗号
$$99.9指定开头返回一个美元符号
EEEE9.99EEEE指定科学计数法

逻辑判断函数

函数名描述例子结果
CASE
DECODE格式: DECODE(col|expression, search1,result1 [search2, result2, …,] [, default]) 与CASE有相同的功能,先判断search1的值是否和col或expression的值相等,如果相等,返回result1的值,否则判断search2,依次类推,如果都不相等,返回默认值default
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个更完整的基于Oracle数据库的图书馆管理系统,包括一些触发器和函数,并带有数据视图以及索引: 首先,我们需要创建以下格: 1. 书籍(books) ``` CREATE TABLE books( book_id NUMBER PRIMARY KEY, title VARCHAR(100), author VARCHAR(50), publisher VARCHAR(50), publish_date DATE, quantity NUMBER ); ``` 2. 借阅记录(borrow_records) ``` CREATE TABLE borrow_records( borrow_id NUMBER PRIMARY KEY, book_id NUMBER, borrower VARCHAR(50), borrow_date DATE, return_date DATE ); ``` 3. 用户(users) ``` CREATE TABLE users( user_id NUMBER PRIMARY KEY, username VARCHAR(50), password VARCHAR(50), email VARCHAR(50) ); ``` 接下来,我们可以创建以下触发器: 1. 在书籍(books)插入记录时,自动更新库存量(quantity) ``` CREATE TRIGGER update_quantity AFTER INSERT ON books FOR EACH ROW BEGIN UPDATE books SET quantity = quantity + :new.quantity WHERE book_id = :new.book_id; END; ``` 2. 在借阅记录(borrow_records)插入记录时,自动更新书籍库存量(quantity)和借阅次数 ``` CREATE TRIGGER update_borrow_info AFTER INSERT ON borrow_records FOR EACH ROW BEGIN UPDATE books SET quantity = quantity - 1 WHERE book_id = :new.book_id; UPDATE books SET borrow_count = borrow_count + 1 WHERE book_id = :new.book_id; END; ``` 3. 在借阅记录(borrow_records)更新记录时,自动更新归还日期(return_date) ``` CREATE TRIGGER update_return_date BEFORE UPDATE OF borrow_date ON borrow_records FOR EACH ROW BEGIN IF :new.return_date IS NULL THEN :new.return_date := SYSDATE + 30; END IF; END; ``` 接下来,我们可以创建以下函数: 1. 检查用户是否存在 ``` CREATE OR REPLACE FUNCTION check_user(username IN VARCHAR, password IN VARCHAR) RETURN BOOLEAN AS user_count NUMBER; BEGIN SELECT COUNT(*) INTO user_count FROM users WHERE username = check_user.username AND password = check_user.password; IF user_count > 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END; ``` 接下来,我们可以创建以下数据视图: 1. 查询借阅记录(borrow_records)借阅次数最多的书籍 ``` CREATE VIEW top_borrowed_books AS SELECT book_id, COUNT(*) AS borrow_count FROM borrow_records GROUP BY book_id ORDER BY borrow_count DESC; ``` 最后,我们可以创建以下索引: 1. 在书籍(books)的书名(title)和作者(author)列上创建索引 ``` CREATE INDEX books_title_author_idx ON books(title, author); ``` 以上是一个更完整的图书馆管理系统,带有数据视图以及索引,并包括了触发器和函数来帮助管理该系统。您可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值