在登录的时候有用户名、密码、主机字符串
前两个就是直接输入。
后面一个的含义:
是你连接数据库的信息,比如你想连接到名为test的数据库,你可以将连接字符串中写入test,当然如果你想连接的数据库位于其他服务器上,
比如名为aa的服务器上,则可以在连接字符串中写入aa:1521:test.还可以写入连接身份,比如以管理员身份登录,则可以键入test as sysdba。
本人的用户以管理员登录是ORCL,所以用ORCL as sysdba.
切换用户:
正常在SQL/PLUS的情况下:输入:connect username/password就可以了。
但是有时候可能不知道要切换的用户口令,这时候该怎么办呢?
看了EYGLE的文章,知道有两种方法:
第一种:
1.用DBA身份连接至数据库,查看dba_users视图。
Select username,password from dba_users where username=’JLY’;
如果是oracle 11g的话,需要访问基表才能看到加密的口令
SQL> select name,password from user$ where name='JLY';
NAME PASSWORD
------------------------------ ------------------------------
JLY 10967C6E22106A7E
2.修改口令并连接至数据库
Alter user jly identified by jly;
Conn jly/jly
3.成功执行完第2步的命令后马上把用户的密码修改回原来的口令
SQL> alter user jly identified by values ‘10967C6E22106A7E’;
这样jly用户的口令就被还原了,而我们现在可以以jly用户的身份执行一系列操作了。
第二种:
1.以DBA身份连接至数据库,创建一个代理用户,授予权限。
SQL> create user dbproxy identified by dbproxy;
User created.
SQL> grant connect to dbproxy;
Grant succeeded.
2.使目标用户可以通过代理用户切换
SQL> alter user jly grant connect through dbproxy;
User altered.
3.登录测试
SQL> conn dbproxy[jly]/dbproxy
Connected.
SQL> show user
USER is "JLY"
SQL>
以上两种方法应首选后者,因为第一种方法在修改用户口令的时候有可能造成原来的用户登陆失败.
命令:
1.remark 告诉SQLPLUS接下来的文字是注释,不是指令
2.set headseq 标题分隔符标识一个告诉SQLPLUS将一个标题分为两行或者更多行的字符
3.ttitle 设置报表每一页的头标题
4.btitle 设置报表每一页的尾标题
5.column 给SQLPLUS各种关于列的标题、格式和处理的指令
6.break on 告诉SQLPLUS在报表的各部分间插入空格,或者将小计和总计断开
7.compute sum 令SQLPLU计算小计
8.set linesize 为报表的行设置最大字符数
9.set pagesize 为页设置最大行数
10.set newpage 设置页与页之间的空行数
11.spool 将在屏幕上显示的报表写入一个文件中
12./**/ 在SQL项内标记一个注释的开头和结尾,类似与remark
13.-- 在SQL项内标记联机注释的开始,将该标记开始到本行末尾的一切内容都视为注释。类似于remark。
14.set pause 使屏幕显示在页与页之间停顿
15.save 把正在建立的SQL查询保存到一个选中的文件中
16.host 向主操作系统发送命令
17.start或@ 告诉SQLPLUS执行已经从存储到文件中的指令
18.edit 离开SQLPLUS并进入到所选择的编辑器
19.define_editor告知SQLPLUS你所选择的编辑器
20.exit或quit 终止SQLPLUS
注:
⑴column可以更改select语句中任何列的格式和标题。
column Name format a20
a20告知SQLPLUS这是一个字母列,而不是数字列,Name列显示的宽度设置为20
⑵break on命令必须和order by语句一起使用
⑶每个compute avg命令必须有一个相关的break on
类似的还有compute sum,compute count,compute max等
⑷seb newpage确切地说应该称为“设置空白行”。
⑸spool 假脱机,spool off告知停止假脱机。
⑹命令行编辑器
当输入一条SQL语句时,SQLPLUS会在输入的同时记住每一行,并存储于一个SQL buffer中。
例如输入如下查询:
select Featuer,Section,Page
from NEWSPAPER
where Secton='F';
SQLPLUS会报错,检查发现Feature拼错了,不用重新输入整个查询,用命令行编辑器即可:
list
SQLPLUS命令会将输入的查询列出:
1 select Featuer,Section,Page
2 from NEWSPAPER
3* where Secton='F';
*号表示这行是可以编辑的,要想修改第一行,list 1 命令将调出相应的内容:
list 1
1* select Featuer,Section,Page
这时可以输入如下命令来更改:
change /Featuer/Feature
1* select Featuer,Section,Page
再输入list命令检查整个查询:
list
1 select Feature,Section,Page
2 from NEWSPAPER
3* where Secton='F';
确认正确后输入一个斜线(/)将运行查询。此斜线与change命令或编辑器无关,它只是告知
SQLPLUS在缓冲区中执行SQL。
命令行编辑器还可以删除行,命令为del。如果输入delete的话,这个命令将删除所有的行。
如果想要清除整个select语句,可以输入如下命令:
clear buffer
如果想在当前行追加内容,可以用append 命令,append命令把追加的内容房子当前行的末端,
中间不留空隙。
还可以在当前行后面再输入一个全新的行,用命令input。
命令行编辑器只能编辑SQL语句,不能编辑sqlplus命令。
⑺检查SQLPLUS环境变量
检查某个特定的列是如何定义的:
column 列名
如果column后面没有跟任何列名,则将列出所有的列;
同样可以对ttitle、btitle、break和compute进行检查,方法同column。
检查set命令的设置可以用show命令来进行查看:
show headsep
show linesize
show pagesize
show newpage
ttitle和btitle设置可以用ttitle off 和btitle off 命令来禁止。
columns、breaks和computes的设置可以通过clear columns、clear breaks和clear computes
命令进行清除。
格式化命令:
SQL> host cls
SQL> rem 列格式元素
SQL> 、*
SP2-0042: 未知命令 "、*" - 其余行忽略。
SQL> /*
SQL> 元素 描述 示例
SQL> An 设置显示宽度 A5
SQL> 9 数字 999999
SQL> 0 强制列标题为0 099999
SQL> $ 浮动的货币符号 $9999
SQL> L 本地货币符号 L9999
SQL> . 小数点位置 9999.99
SQL> , 千位分隔符 99,999
SQL> */
SQL> column ename heading '雇员姓名' format A15
SQL> column sal heading '薪水' justify center format $99,999.00
SQL> column comm heading '红利' justify right format $99,999.00 NULL '无'
SQL> column hiredate heading '聘用日期'
SQL> select ename,sal,comm,hiredate
2 from emp;
from emp
*
第 2 行出现错误:
ORA-00942: 表或视图不存在
SQL> slect * from emp;
SP2-0734: 未知的命令开头 "slect * fr..." - 忽略了剩余的行。
SQL> c /slect/select
SP2-0023: 未找到字符串
SQL> ed
已写入 file afiedt.buf
1 select ename,sal,comm,hiredate
2* from emp
SQL> select * from emp;
select * from emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> connect scott\
ERROR:
ORA-01005: 给出空口令; 登录被拒绝
警告: 您不再连接到 ORACLE。
SQL> connect scott\tiger
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect scott/tiger
已连接。
SQL> select distinct user from tab;
USER
------------------------------
SCOTT
SQL> select * from emp;
EMPNO 雇员姓名 JOB MGR 聘用日期 薪水
---------- --------------- --------- ---------- -------------- -----------
红利 DEPTNO
----------- ----------
7369 SMITH CLERK 7902 17-12月-80 $800.00
无 20
7499 ALLEN SALESMAN 7698 20-2月 -81 $1,600.00
$300.00 30
7521 WARD SALESMAN 7698 22-2月 -81 $1,250.00
$500.00 30
EMPNO 雇员姓名 JOB MGR 聘用日期 薪水
---------- --------------- --------- ---------- -------------- -----------
红利 DEPTNO
----------- ----------
7566 JONES MANAGER 7839 02-4月 -81 $2,975.00
无 20
7654 MARTIN SALESMAN 7698 28-9月 -81 $1,250.00
$1,400.00 30
7698 BLAKE MANAGER 7839 01-5月 -81 $2,850.00
无 30
EMPNO 雇员姓名 JOB MGR 聘用日期 薪水
---------- --------------- --------- ---------- -------------- -----------
红利 DEPTNO
----------- ----------
7782 CLARK MANAGER 7839 09-6月 -81 $2,450.00
无 10
7788 SCOTT ANALYST 7566 19-4月 -87 $3,000.00
无 20
7839 KING PRESIDENT 17-11月-81 $5,000.00
无 10
EMPNO 雇员姓名 JOB MGR 聘用日期 薪水
---------- --------------- --------- ---------- -------------- -----------
红利 DEPTNO
----------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 $1,500.00
$.00 30
7876 ADAMS CLERK 7788 23-5月 -87 $1,100.00
无 20
7900 JAMES CLERK 7698 03-12月-81 $950.00
无 30
EMPNO 雇员姓名 JOB MGR 聘用日期 薪水
---------- --------------- --------- ---------- -------------- -----------
红利 DEPTNO
----------- ----------
7902 FORD ANALYST 7566 03-12月-81 $3,000.00
无 20
7934 MILLER CLERK 7782 23-1月 -82 $1,300.00
无 10
已选择14行。
SQL> select ename,sal,comm,hiredate
2 from emp;
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> -- 指定页眉页脚的命令
SQL> ttitle '雇员薪水清单'
SQL> btitle '----------BOCO科技发展有限公司-------------'
SQL> /
星期四 1月 08 第 1
雇员薪水清单
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
----------BOCO科技发展有限公司-------------
星期四 1月 08 第 2
雇员薪水清单
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
----------BOCO科技发展有限公司-------------
已选择14行。
SQL> -- 暂停输出数据 pause 命令
SQL> set pause on
SQL> /
SQL> set pause off
SQL> -- 设置一页的数据大小
SQL> -- pagesize命令
SQL> ttitle off
SQL> btitle off
SQL> -- 这里的‘页’的意思是:包括屏幕上显示的任何东西
SQL> set pagesize 20
SQL> /
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> set pagesize 14
SQL> /
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> show feedback
用于 6 或更多行的 FEEDBACK ON
SQL> select ename,sal,comm,hiredate from emp;
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> select ename,sal,comm,hiredate from emp where rownum<6;
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
SQL> set pagesize 20
SQL> select ename,sal,comm,hiredate from emp;
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> set pagesize ""
SP2-0268: pagesize 选项的编号无效
SQL> set pagesize
SQL> /
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> select ename,sal,comm,hiredate from emp;
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> show pagesize
pagesize 0
SQL> set pagesize 14
SQL> /
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
SMITH $800.00 无 17-12月-80
ALLEN $1,600.00 $300.00 20-2月 -81
WARD $1,250.00 $500.00 22-2月 -81
JONES $2,975.00 无 02-4月 -81
MARTIN $1,250.00 $1,400.00 28-9月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
TURNER $1,500.00 $.00 08-9月 -81
ADAMS $1,100.00 无 23-5月 -87
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
JAMES $950.00 无 03-12月-81
FORD $3,000.00 无 03-12月-81
MILLER $1,300.00 无 23-1月 -82
已选择14行。
SQL> desc emp
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> desc dbms_output
PROCEDURE DISABLE
PROCEDURE ENABLE
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
BUFFER_SIZE NUMBER(38) IN DEFAULT
PROCEDURE GET_LINE
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
LINE VARCHAR2 OUT
STATUS NUMBER(38) OUT
PROCEDURE GET_LINES
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
LINES TABLE OF VARCHAR2(32767) OUT
NUMLINES NUMBER(38) IN/OUT
PROCEDURE GET_LINES
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
LINES DBMSOUTPUT_LINESARRAY OUT
NUMLINES NUMBER(38) IN/OUT
PROCEDURE NEW_LINE
PROCEDURE PUT
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
A VARCHAR2 IN
PROCEDURE PUT_LINE
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
A VARCHAR2 IN
SQL> -- prompt命令
SQL> prompt
SQL>
SQL> prompt 显示用户和默认表空间的清单
显示用户和默认表空间的清单
SQL> select username,default_tablespace from dba_users;
select username,default_tablespace from dba_users
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> /
select username,default_tablespace from dba_users
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select ename,sal,comm,hiredate from emp where sal > &amount;
输入 amount 的值: 1580
原值 1: select ename,sal,comm,hiredate from emp where sal > &amount
新值 1: select ename,sal,comm,hiredate from emp where sal > 1580
雇员姓名 薪水 红利 聘用日期
--------------- ----------- ----------- --------------
ALLEN $1,600.00 $300.00 20-2月 -81
JONES $2,975.00 无 02-4月 -81
BLAKE $2,850.00 无 01-5月 -81
CLARK $2,450.00 无 09-6月 -81
SCOTT $3,000.00 无 19-4月 -87
KING $5,000.00 无 17-11月-81
FORD $3,000.00 无 03-12月-81
已选择7行。
SQL> select empno,ename,job,&&columnName
2 from emp
3 where sal >= 3000
4 order by &columnName;
输入 columnname 的值: sal
原值 1: select empno,ename,job,&&columnName
新值 1: select empno,ename,job,sal
原值 4: order by &columnName
新值 4: order by sal
EMPNO 雇员姓名 JOB 薪水
---------- --------------- --------- -----------
7788 SCOTT ANALYST $3,000.00
7902 FORD ANALYST $3,000.00
7839 KING PRESIDENT $5,000.00
SQL> -- define 和 undefine命令
SQL> define deptName = 'sales'
SQL> define deptName
DEFINE DEPTNAME = "sales" (CHAR)
SQL> select *
2 from dept
3 where dname = upper('&deptName');
原值 3: where dname = upper('&deptName')
新值 3: where dname = upper('sales')
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO
SQL> -- accept 命令是可以定制一个用户提示
SQL> -- 用于提示用户输入指定的数据
SQL> accept deptName prompt '请输入部门名字'
请输入部门名字sales
SQL> /
原值 3: where dname = upper('&deptName')
新值 3: where dname = upper('sales')
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO
SQL> -- show 命令‘
SQL> show all
appinfo 为 OFF 并且已设置为 "SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF 为后面的 43 个字符:
----------BOCO科技发展有限公司-------------
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 为 ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
用于 6 或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 5
loboffset 1
logsource ""
long 80
longchunksize 80
numwidth 10
pagesize 14
PAUSE 为 OFF
pno 1
recsep WRAP
recsepchar " " (hex 20)
release 1002000100
repfooter OFF 为 NULL
repheader OFF 为 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool ON
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlpluscompatibility 10.2.0
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
timing OFF
trimout ON
trimspool OFF
ttitle OFF 为后面的 12 个字符:
雇员薪水清单
underline "-" (hex 2d)
USER 为 "SCOTT"
verify ON
wrap : 将换至下一行
SQL> show spool
spool ON
SQL> show errors
没有错误。
SQL> show parameters
ORA-00942: 表或视图不存在
SQL> show parameters
ORA-00942: 表或视图不存在
SQL> spool off