shell 脚本连接Oracle数据库创建表结构

工作中用到数据库,但是因为权限问题,plsql一直连不上生产库,之前一直是通过sqlplus连接数据库,虽然查询不太方便显示,但是在一些常规的查询,操作,sqlplus还是比较高效的。现在把我今天弄了一上午(初学)的Oracle数据库创建过程记录下。是通过shell脚本通过sqlplus连接数据库并创建表。在这里把创建表和插入数据的学习文件记录下。比较抠脚,哈哈。

一、创建表 create_student2.sh

创建一个学生信息表,表内容包括:

学生ID,姓名,性别(男生 'M', 女生'WM' ),年龄,地址,生日

#!/bin/bash
er="root"  #用变量来存储用户
DB="class"   #数据库为class
TB="student2" #需要建立的表是student
SQE="student2_sequence"

echo "start to create table name is $TB"
sqlplus user/'passwd'@db<

执行脚本

shell 脚本连接Oracle数据库创建表结构_第1张图片

 

这里说明几个地方:由于子命令中注释语句无法通过,因此没有添加注释。

1.EOF<< 

在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。

EOF只是一个分界符,当然也可以用abcde替换。
当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
此分界符可以是所定义的任何字符串,其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,完全可以换成abcde之类的字符串,只是一个起始和结束的标志罢了。

command< (内容)
EOF

2.以上shell脚本子命令中包含下面的语句,这部分语句的作用是创建一个序列和触发器。

drop sequence $SQE; -- 删除序列

-- 创建序列
create sequence $SQE    
       increment by 1  
       start with 1000     
       nomaxvalue        
       nocycle           
       nocache;
--创建触发器         
CREATE TRIGGER student2_trigger  
   BEFORE INSERT ON student2  
   FOR EACH ROW  
   WHEN (new.sid is null)  

begin  
   select $SQE.nextval into :new.sid from sys.dual;  -- 当 sid为null的时候出发序列
end;

3.Oracle创建表的语句:sqlplus UCR_PARAM/'YNNZABC1!'@bosscend <


drop table $TB;
create table $TB(
sid     number(10) primary key not null,
sname   varchar2(20) not null,
sage    number not null, 
ssex    char(2) not null, 
saddress varchar2(20) not null, 
sbirth  date
);

2、插入数据

#!/bin/bash
#DB="class"   #数据库为class
TB="student2" #需要建立的表是student
SQE="student2_sequence"
echo "start to insert into  table name is $TB"
sqlplus UCR_PARAM/'YNNZABC1!'@bosscend <

执行脚本

shell 脚本连接Oracle数据库创建表结构_第2张图片

 

依然是shell 脚本连接 Oracle数据库并通过子命令向数据库中插入数据

insert into $TB(sid,sname,sage,ssex,saddress,sbirth) values(1,'lily', 24, 'M','Shanxi', to_date('1994-01-14','yyyy-mm-dd'));

这里有个问题,不知道为什么,我创建了序列,但是当我插入不带sid字段的数据时候,脚本提示不能插入null字段的sid。

sqlplus连接数据库查询结果

shell 脚本连接Oracle数据库创建表结构_第3张图片

注意:

sqlplus连接数据库时,感叹号要加反斜杠去特殊字符例如

数据库用户密码:ucr_coll/Ucrcoll!12@billog    (!号要添加反斜杠)

 sqlplus ucr_coll/Ucrcoll\!12@billog

或者密码字段用单引号 ‘ ’

例如

sqlplus ucr_coll/'Ucrcoll\!12'@billog

你可能感兴趣的:(Oracle)