十四、操作Oracle数据库
1.sqlpus中“-L”“-S”用法
1)sqlplus中查询并赋值,通常使用“-S”以安静模式登录(不显示sqlplus的版本、帮助、提示、命令信息),通常用来获取查询结果并赋值给变量。(slient)
SYS_DATE=`sqlplus -S ORACLEUSER/PASSWORD@$ORACLE_SID <<EOF
set heading off
set pagesize 0;
set feedback off;
set verify off;
set echo off;
SELECT SYSDATE FROM DUAL;
QUIT
EOF`
2)sqlplus中执行DML、Procecure,通常使用“-L”,仅登录一次,通常用来执行procedure、DML
sqlplus -L ORACLEUSER/PASSWORD@$ORACLE_SID <<EOF
set serveroutput on
set linesize 120
set pagesize 0
set TAB off
set FEEDBACK off
set HEADING off
set TRIMOUT off
set Verify off
INSERT INTO T1 VALUES ('TOUGH1',SYSDATE);
EXEC TOUGH_PROC('HK');
COMMIT;
QUIT
EOF
2.sqlplus和shell互相传值的情况
1)情况一:在shell中最简单的调用sqlplus
$cat test.sh
#!/bin/sh
sqlplus oracle/oracle@oracle>file.log <<EOF
select * from test;
exit
EOF #注意EOF要顶格写
$sh test.sh
$cat file.log
--省略若干系统提示信息-------
SQL>
EMPNO EMPNAME SAL DEPTNO
----- ------------- ----- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
--省略若干系统提示信息-------
将执行过程重定向入文件file.log,可通过cat file.log查看
2)情况二:直接将sqlplus的值赋值给shell变量
$cat test.sh
#!/bin/sh
# 将sqlplus的结果输出给变量VALUE
# set命令的使用可查询手册
#注意shell中等号两边不能有空格
VALUE=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn oracle/oracle@oracle
select count(*) from test;
exit
EOF`
#输出记录数
echo "The number of rows is $VALUE."
$sh test.sh
The number of rows is 2.
显示结果正确,表test共2条记录
3)情况三:间接将sqlplus的值赋值给shell变量
$cat test.sh
#!/bin/sh
#利用COL column NEW_VALUE variable定义变量
#sqlplus执行完后最后返回值为v_coun
#利用$?将最后返回值赋值给VALUE,也即为test的记录数
sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn oracle/oracle@oracle
col coun new_value v_coun
select count(*) coun from test;
exit v_coun
EOF
VALUE="$?"
echo "The number of rows is $VALUE."
$sh test.sh
2
The number of rows is 2.
脚本执行结果中第一个2为sqlplus返回值,第二个2为VALUE的值
4)情况四:将shell变量的值传给sqlplus使用
$cat test.sh
#!/bin/sh
#sqlplus引用shell变量TABLENAME的值
#注意赋值时,等号两边不能有空格
TABLENAME="test"
sqlplus -S oracle/oracle@oracle <<EOF
select * from ${TABLENAME};
exit
$sh test.sh
EMPNO EMPNAME SAL DEPTNO
----- -------------------------------------------------- ---------- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
脚本执行结果为:select * from test;的结果
5)情况五:通过交互方式手工输入shell变量值
$cat test.sh
#!/bin/sh
#将手工输入变量值读入变量TABLENAME
echo "Enter the tablename you want to select:"
read TABLENAME
sqlplus -S oracle/oracle@oracle <<EOF
select * from ${TABLENAME};
exit
$sh test.sh
#按提示输入表名test
Enter the tablename you want to select:
test
EMPNO EMPNAME SAL DEPTNO
----- -------------------------------------------------- ---------- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
脚本执行结果为select * from test的执行结果
3.安装Oracle数据库(太复杂暂不研究,有需要的朋友可以下载docker镜像研究)
4.数据的导出
1)表方式
只导出某个用户下的几张表:导出scott用户下的dept和emp的数据
2)用户(方案)方式
导出scott用户下的所有的内容:
导出:exp ploan/ploan file=ploan.dmp log=ploan.log owner=ploan
导入:imp ploan/ploan@ploan file=ploan.dmp fromuser=ploan touser=ploan
3)全库方式
导出整个数据库:必须是数据库管理员,普通用户不可以
4)提示模式
只需要输入:exp scott/tiger 后面会有提示,按照提示一步步完成导出
5…dat文件导入数据库的方法(也可以用CSV文件)
导入语句
sqlldr userid=用户名/密码@ip/数据库实例 control=.ctl文件的所在位置 rows=100000 direct=y data=.dat文件价的位置 log=log文件的位置
6.Linux连接数据库
1)登录:
sqlplus 用户名/密码
2)不需要用户登录:
sqlplus /nolog
需要登录时:conn 用户名