Oracle 基础知识入门

前记:

近来项目用到Oracle数据库,大学学了点,后面基本忘记得差不多了,虽然基本语法跟sql 差不多,但是oracle知识是非常多的。

这里简单说点基础知识,希望后面补上更多的关于ORacle知识博客。入门的朋友可以看看,高手就可以绕过了。

 

不晓得你们用的什么工具,我用的Toad。用起来还是不错的。

 

第一部分,创建数据,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
create table student
(
sName varchar(20) primary key,
sAge int,
sEmail varchar(100),
sPhone varchar(20),
sAddress varchar(100)
)
 
insert into student values(‘Jack‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack1‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack2‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack3‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack54‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack6‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack7‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jack21‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Rose‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘rose1‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘rose2‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘rose4‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Adi‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Aditt‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Niyes‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Jassic‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Carken‘,21,[email protected],‘2134343‘,‘Singapore‘);
insert into student values(‘Donview‘,21,[email protected],‘2134343‘,‘Singapore‘);
commit;

 

执行其他都会报错的.

 

第二部分,看几个关于Spool的命令

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spool c:/test.log; --将下面的查询结果放在这个文件中,如果文件不存在,会自动创建
 
select * from student;
 
spool off--完成spool
--执行后,你就可以去相应的目录去查看Log了。
--再看一个例子
set feedback on; --如果这里设置为off,则看不到18 rows selected
set termout on; --如果这里设置为off,则看不到结果
set echo on; --这里看到SQL>命令,就是这个开启的原因
spool c:/test.log;
 
select * from student;
 
spool off;
exit;

  

结果(只显示了一部分):

 

 

 

spool常用的设置
set echo on;    //显示start启动的脚本中的每个sql命令,缺省为off
set feedback on;  //回显本次sql命令处理的记录条数,缺省为on
set heading off;   //输出域标题,缺省为on
set pagesize 0;   //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout on;   //显示脚本中的命令的执行结果,缺省为on
set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off

上面的命令最好自己亲自动手测试下。因为我发现自己测试是跟下面的链接,其他前辈有出入。

所以自己动手去实践下比较好。

对于spool的相关了解,查看下面的这个链接

http://blog.sina.com.cn/s/blog_6bccf0360101hzsh.html

http://blog.csdn.net/shangyang326/article/details/3304621

 

第三部分,几个oracle 脚本知识入门。

主要查看下面这两个链接:

http://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23plsql-1906474.html

http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/a_samps.htm

 

1,我们想查看姓名=Jack 的信息,这里只有一条记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set serveroutput on; --要想看到打印结果,则必须开启这个命令。
DECLARE
  l_name  varchar(100);
  --l_name  student.sName%TYPE; 相同的效果,推荐使用这个。
BEGIN
  SELECT sName  INTO l_name
  FROM student
  WHERE sName = ‘Jack‘;
 
  DBMS_OUTPUT.put_line (‘find the name: ‘||l_name);
END;
 
结果:
find the name: Jack
PL/SQL procedure successfully completed.

  

 

关于Type的用法,查看

http://blog.csdn.net/chen_linbo/article/details/6367871

 

2, 查看姓名包含rose的信息(包含多条记录)。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set serveroutput on;
 
DECLARE
  cursor name_rose_cur is
  select sName from student where upper(sName) like upper(‘%rose%‘);
  l_name  student.sName%TYPE;
BEGIN
   open name_rose_cur;
   Loop
       fetch name_rose_cur into l_name;
       exit when name_rose_cur%NOTFOUND;
        
       DBMS_OUTPUT.put_line (‘find the name: ‘||l_name);
   end loop;
    
   close name_rose_cur;
END;

 

结果:

1
2
3
4
5
find the name: Rose
find the name: rose1
find the name: rose2
find the name: rose4
PL/SQL procedure successfully completed.

  

Oracle 水很深,希望再接再厉.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。