45个非常有用的Oracle查询语句
1。得到当前月的第一天
运行此命令可以快速返回到当前月的第一天。你可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择trunc(SYSDATE,'month ')的第一天,本月
从双;
2。得到当前月的最后一天
这个查询是类似上面的声明,并充分照顾闰年,所以当有一个29号在二月,它将返回到29 / 2.你能够使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择trunc(last_day(SYSDATE)本月的最后一天)
从双;
三.获得本年度第一天
这一年的第一天是1月1日,这可以使用查询存储过程中,需要对目前的一年的第一天做一些计算。你可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择trunc(SYSDATE,'year ')年的第一天,双;
4。得到本年度的最后一天
类似上面的查询语句,您可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码如下:选择add_months(trunc(SYSDATE,'year '),12)1年的最后一天双
5。获取当前月份的天数
这句话是非常有用的,可以计算在当月的天数。你可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择演员(to_char(last_day(SYSDATE),'dd)为int)number_of_days双;
6。获取当前月份的剩余天数
下面的语句是用来计算当月剩下的日子。你可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择sysdate,
last_day(SYSDATE)去年
last_day(SYSDATE)- SYSDATE天左
从双;
7。获取两个日期之间的天数
使用这个语句可以得到两个不同日期的天数来检查自己。
复制代码代码如下所示:
选择圆((months_between('01-feb-2014 ','01-mar-2012 ')* 30),0)num_of_days双;
或
选择trunc(SYSDATE)- trunc(e.hire_date)员工;
如果您需要查询特定日期的天数,可以使用第二个查询语句。
8。显示当前一年结束到上个月的开始和结束的日期。
这是一个非常聪明的查询,用于显示本年开始日期和月底日期。你可以用这个来做计算若干种。你可以使用任何日期值代替SYSDATE指定日期的查询。
复制代码代码如下所示:
选择add_months(trunc(SYSDATE,'month),我start_date),
trunc(last_day(add_months(SYSDATE,我end_date)))
从(XMLTable
我在0美元以XS:int(D)返回的我
通过(xmlelement
D,
(地板
(MONTHS_BETWEEN
add_months(trunc(SYSDATE,'year)- 1, 12)。
系统日期))))
列i整数路径);
9。让过去的秒数(从00:00)直到现在。
复制代码如下:选择(SYSDATE - TRUNC(SYSDATE))* 24 * 60 * 60 num_of_sec_since_morning双;
10。今天把剩余的秒(直到23:59:59结束)
复制代码如下:选择(trunc(SYSDATE + 1)- SYSDATE)* 24 * 60 * 60 num_of_sec_left双;
数据字典查询
11。检查当前数据库模式中是否有指定的表。
这是一个简单的查询,用于检查当前要创建表的数据库,允许您运行此脚本来创建一个表,还可以检查当前用户是否已经创建了指定的表(根据运行此查询在什么情况下查询)。
复制代码代码如下所示:
选择table_name
从user_tables
在table_name = 'table_name;
12。检查当前表中是否有指定的列。
这是一个简单的查询语句,用于检查表中是否有指定的列。当您尝试使用变更表将新列添加到表中时,它非常有用。它会告诉你是否已经有了这个列。
复制代码代码如下所示:
选择column_name发现
从user_tab_cols
在table_name = 'table_name'and column_name = 'column_name;
13。显示表的结构
这个查询语句显示任何表的DDL状态信息。请注意,我们提出桌子作为第一消息。这个查询也可以用来获取任何数据库对象的DDL状态信息。例如,你只需要替换第一个参数视图,第二可以被改变的视图的名称,你可以查询视图的DDL信息。
复制代码代码如下所示:
选择dbms_metadata.get_ddl(}},'table_name ','user_name)从双;
14。获取当前模式
这是另一个查询,可以获得当前模式的名称。
复制代码代码如下所示:
选择sys_context('userenv ','current_schema)从双;
15。修改当前模式
这是另一个可以修改当前模式的查询语句。这是非常有用的,当你想要你的脚本运行在指定的用户,这是一个非常安全的方式。
复制代码代码如下所示:
改变会话设置current_schema = new_schema;
数据库管理查询
16。数据库版本信息
返回Oracle数据库版本
复制代码代码如下所示:
从V $版本中选择*;
17。数据库的默认信息
返回一些系统默认信息
复制代码代码如下所示:
选择用户名,
简介,
default_tablespace,
temporary_tablespace
从dba_users;
18。数据库字符设置信息
显示数据库的字符设置信息。
复制代码代码如下所示:
SELECT * FROM nls_database_parameters;
19。获取Oracle版本
复制代码代码如下所示:
选择值
从V system_parameter美元
name = 'compatible;
20。存储案例和案例数据,但索引不区分大小写。
有时您可能希望查询数据库中的独立数据,可能会使用大写(..)=上(..)用于不区分大小写的查询,因此我们希望使索引不区分大小写,不占用这么多空间,这个语句可以解决您的需要。
复制代码代码如下所示:
表(col1 VARCHAR2(10));
创建索引IDX1
在标签(上(2));
分析表;
21。调整不添加数据文件的表空间。
另一个DDL查询调整表空间的大小
复制代码代码如下所示:
使数据文件/ / / / star02d oradata startst dbf'resize 2000m;
22。自动查表空间扩展开关
查询是否在给定的表空间中打开自动扩展开关。
复制代码代码如下所示:
选择substr(file_name,1, 50),autoextensible从dba_data_files;
(或)
选择tablespace_name,autoextensible从dba_data_files;
23。在表空间中添加数据文件
向表空间添加数据文件
复制代码代码如下所示:
改变表空间添加数据的 /工作/ oradata / / startst DBF的立。
大小1000m自动关闭;
24。增加数据文件的大小
增加指定表空间的大小。
复制代码代码如下所示:
使数据文件 / / / test_data_01 U01 APP。dbf'resize 2g;
25。查询数据库的实际大小
给出一个基于GB的数据库的实际大小。
复制代码代码如下所示:
选择的总和(字节)/ 1024 / 1024 / 1024 GB的dba_data_files;
26。查询数据库中数据的大小或数据库使用的详细信息。
给出数据库中数据所占用的空间大小。
复制代码代码如下所示:
选择的总和(字节)/ 1024 / 1024 / 1024 GB的dba_segments;
27。查询模式或用户的大小
用户空间的大小为MB
复制代码代码如下所示:
选择和(字节 1024 1024)大小
从dba_segments
那里的老板= 'owner;
28。查询数据库中每个用户使用的最后一个SQL查询。
这个查询语句显示了当前数据库中每个用户最后使用的SQL语句。
复制代码代码如下所示:
选择s.username | | '(' s.sid| | | |)- | | s.osuser uname,
S.program | | - | | s.terminal | |(机| | | | '程序'),
S.sid | || | s.serial #希德,
s.status地位
P.spid,
sql_text sqltext
sqltext_with_newlines美元从V T,V $ SESSION,v$进程P
在t.address = s.sql_address
和p.addr = s.paddr(+)
和t.hash_value = s.sql_hash_value
为了s.sid,t.piece;
性能相关的查询
29。查询用户CPU使用情况
该语句用于显示每个用户的CPU使用情况,并帮助用户了解数据库负载情况。
复制代码代码如下所示:
选择ss.username,se.sid,价值/ cpu_usage_seconds 100
从V $ SESSION SS,V V statname美元美元sesstat硒、锡
其中SE。统计# = Sn。统计#
和类似于% % CPU的名称
和se.sid = ss.sid
和ss.status =活动
和ss.username不空
通过价值倒序;
30。查询长查询数据库的进展
在运行中显示长查询的进度
复制代码代码如下所示:
选择A.sid,
a.serial #,
B.username,
opname操作,
目标对象,
trunc(elapsed_seconds,5)和(S)
to_char(start_time,'hh24:MI:SS)start_time,
圆(((到目前为止 /总工作量)×100, 2)完成(%)
session_longops美元从V,V $ SESSION B
在a.sid = b.sid
和b.username不('sys '系统')
和总工作量> 0
为了elapsed_seconds;
31。获取当前会话ID、进程ID、客户端ID等
这是特别提供给那些想要使用进程ID和会话ID来做一些巫术魔法的用户。
复制代码代码如下所示:
选择B.sid,
b.serial #,
A.spid ProcessId,
B.过程clientpid
从v $过程A,V $会话B
在a.addr = b.paddr和b.audsid = Userenv('sessionid);
V和V session.sid美元$ SESSION。串行#是数据库的进程ID
V process.spid美元是数据库服务器进程ID
V session.process美元在Windows客户端进程ID,它是第一个在#客户端和第二个是分离的进程ID线程ID。
32。查询在特定模式或表中执行的最后一条SQL语句。
复制代码代码如下所示:
选择创建时间戳,last_ddl_time
从all_objects
那里的老板= 'myschema
和object_type = }}
和object_name = 'employee_table;
33。查询每个执行读取的前十个SQL
复制代码代码如下所示:
*选择
从(行号,
substr(a.sql_text,1, 200)sql_text,
(TRUNC
a.disk_reads /解码(a.executions,0, 1,a.executions))
reads_per_execution,
a.buffer_gets,
a.disk_reads,
a.executions,
a.sorts,
a.address
从V sqlarea一美元
3倒序)
在rownum < 10;
34。查询并显示视图中实际的Oracle连接
复制代码代码如下所示:
选择的OSUser,
用户名,
机,
程序
从V $会话
以OSUser;
35。通过打开连接程序来查询并显示打开连接的组。
复制代码代码如下所示:
选择应用程序(程序)numero_sesiones计数
从V $会话
由项目组
通过numero_sesiones倒序;
36。查询并显示连接到Oracle的用户和用户会话的数目。
复制代码代码如下所示:
选择用户名usuario_oracle计数(用户名)numero_sesiones
从V $会话
集团通过用户名
通过numero_sesiones倒序;
37。获取所有者的对象的数量
复制代码代码如下所示:
选择所有者(业主)number_of_objects计数
从dba_objects
集团的老板
通过number_of_objects倒序;
38。将数值转换为文本
可以看到更多的信息:Oracle中的数字转换成单词
复制代码代码如下所示:
选择to_char(to_date(1526,J'),'jsp)从双;
输出:
复制代码代码如下所示:
一千五百二十六
39。查询包源代码中的字符串。
该查询将搜索foo_something对所有软件包的源代码,它可以帮助用户找到特定的存储过程或函数的源代码中的调用。
复制代码代码如下所示:
搜索字符串foo_something在包的源代码
*选择
从dba_source
上(文本)是foo_something %
业主= 'user_name;
40。将逗号分隔的数据插入表中。
当你要插入一个逗号分隔的字符串到一个表,你可以使用其他的查询语句,如在或不在。这里我们将AA、BB、CC、DD、EE、ff'into AA、BB、CC等作为一个表的行,所以你可以很容易地将这些字符串转换为其他表,并做一些相关的操作快。
复制代码代码如下所示:
CSV
作为(select'aa、BB、CC、DD、EE、FF')
作为csvdata
从双)
选择regexp_substr(CSV。csvdata,{ } ^,+,1,水平pivot_char)
从双,CSV
通过regexp_substr(CSV。csvdata,{ } ^,+,1,级)不为空;
41的最后一张唱片。查询表
这个查询非常直接。在表中没有主键,或者如果用户不能确定最大主键是否是最新的主键,我们可以使用此语句查询表中的最后一条记录。
复制代码代码如下所示:
*选择
从员工
其中rowid在(选择最大的员工(rowid));
(或)
从雇员中选择*
减
*选择
员工
在行号(选择<计数(*)员工);
42。在oracle中进行行数据乘法
这个查询语句使用一些复杂的数学函数来完成每行的数值乘法。
复制代码代码如下所示:
与任务型教学
如(从双选择- 2个数字)
联盟
从双选择- 3个数字
联盟
从双选择- 4个数字,
sign_val
作为选择(mod(*),2)当0,然后1其他- 1结束瓦尔
从任务型教学
编号0)
选择出口(求和(ABS(努姆)))
从TBL,sign_val
瓦迩集团;
43。oracle中随机数据的生成
每个开发人员都希望轻松地生成一堆随机数据来测试数据库。这个查询语句可以满足你。它可以在oracle中生成随机数据,插入到表中,在oracle中随机数据中可以看到详细的信息。
复制代码代码如下所示:
选择水平empl_id,
MOD(行号,50000)dept_id,
trunc(dbms_random.value(1000, 500000),2)工资,
解码(圆(dbms_random.value(1, 2)),1,现在,2,F)性别,
(to_date
圆(dbms_random.value(1, 28))
| |'
| |圆(dbms_random.value(1, 12))
| |'
| |圆(dbms_random.value(1900, 2010)),
DD-MM-YYYY)
出生日期,
dbms_random.string(x,dbms_random.value(20, 50))地址
从双
按级别连接< 10000;
44。oracle中随机数的生成
这是一个常见的Oracle老随机数字发生器,可以产生一个随机数的范围内,如果你想设置的数值范围,然后改变乘数。
复制代码代码如下所示:
——在0到100之间生成随机数
选择圆(dbms_random。值)(* 100)+ 1 random_num双;
45。是否有任何数据包含在清单中
可以用多种方式编写。您可以使用计数(*)来检查表中的行数,但是这个查询效率高,速度快,我们只想知道表中是否有数据。
复制代码代码如下所示:
选择1
从table_name
在rownum = 1;
如果您知道一些非常好的查询语句,可以减少Oracle开发人员的负担,请在注释中共享: