Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。
我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道。
除了sql*plus语句,在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后,不保存在sql buffer的内存区域中,它们一般用来对输出的结果进行格式化显示,以便于制作报表。
下面就介绍一下一些常用的sql*plus命令:
1)无登录进入SQL命令行状态
>sqlplus /nolog
SQL>
2)以指定帐号登录数据库
>sqlplus [用户名]/[用户密码]@[本地服务名]
或
>sqlplus [用户名]/[用户密码]@[服务器IP]:[服务器端口,通常为1521]/[SID]
如果帐号是sysdba,命令行需增加参数 as sysdba,如
>sqlplus [用户名]/[用户密码]@[本地服务名] as sysdba
3)执行SQL脚本文件
SQL>start [sql文件]
或
SQL>@ [sql文件]
4)重新运行上一次运行的sql语句
SQL>/
5)将显示的内容输出到指定文件
SQL> SPOOL [文件名]
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
如要关闭spool输出,运行如下命令:
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
6)显示一个表的结构
SQL> desc table_name
7)显示当前环境变量的值:
SQL> Show all
8)显示当前在创建函数、存储过程、触发器、包等对象的错误信息
SQL> Show error
当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
9)显示初始化参数的值:
SQL> show PARAMETERS [parameter_name]
10) 显示数据库的版本:
SQL> show REL[EASE]
11)显示SGA的大小
SQL> show SGA
12)显示当前的用户名
SQL> show user
13)创建用户并付权限
SQL> create user [用户名] identified by [密码] default tablespace [默认的表空间名];
SQL> grant connect,resource to [用户名];
或SQL> grant create session, create table to [用户名];
connect只有create session权限,这是连接数据库的基本权限;resource是开发者权限,至于其中包含的内容可以查询系统表中的具体内容:
SQL> select * from role_sys_privs where role='RESOURCE';
resource一般包括如下权限:
CREATE SEQUENCE
CREATE TRIGGER
CREATE CLUSTER
CREATE PROCEDURE
CREATE TYPE
CREATE OPERATOR
CREATE TABLE
CREATE INDEXTYPE
如果要修改密码,则运行如下命令:
SQL> alert user [用户名] identified by [新密码];
14)创建用户并付权限
SQL> drop user [用户名] cascade;
如果该urer刚创建没有表等对象,可以使用drop user命令删除,否则要使用drop user cascade命令删除,此时会将该用户拥有的对象一同删除。
15)常用函数
sysdate -- 当前日期时间
lower(utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '888888'))) -- md5加密
concat('a','b') -- 合并两个字符串
'a' || 'b' || 'c' -- 合并多个字符串
to_date('2011-01-01 20:28:03','YYYY-MM-DD HH24:MI:SS') -->字符串转换为date类型,参考ORACLE中date类型字段的处理 见
to_char(t.create_date,'YYYY-MM-DD HH24:MI:SS') -->日期转换为字符串
16) 一些特殊的表的查询
查找指定用户的所有表(注意用户名用大写):select * from all_tables where OWNER = '【USERNAME】';
结果中列TABLESPACE_NAME的值为表空间的名称
查找指定表的所有约束:select * from all_constraints where TABLE_NAME = '【TABLE_NAME】';
查找指定表的所有外键:select * from all_constraints where TABLE_NAME = '【TABLE_NAME】' and CONSTRAINT_TYPE = 'R';
对于CONSTRAINT_TYPE的值,R -- 外键、P -- 主键、U -- 唯一性约束、C -- 一般约束(如某列不能为空)
查找指定用户的所有存储过程和函数:select * from all_procedures where OWNER = '【USERNAME】';
地中OBJECT_TYPE列的值为FUNCTION代表函数,值为PROCEDURE代表存储过程
指定索引:select /*+ index(tablename index_name)*/ from tablename
特别注意:
1)用SQL Plus命令行运行sql文件,建表语句内不能有空行,否则报语法错误
2)用SQL Plus命令行运行sql文件,文件内若包含中文,文件格式必须为ANSI(GBK),设为UTF-8会中文乱码