SQL
语句练习
- 显示员工的姓名和雇佣时间,要求中文时间格式,即“2012 年 9 月 26
日”这样的形式(要求不出现 09 月,把 0 去掉)
1
| select to_char(HIREDATE,'yyyy"年"fmmm"月"dd"日"'),ENAME from emp;
|
- 显示员工的姓名和总收入,总收入以美元符号$开头,带小数点后两位
1
| select ENAME,to_char(NVL(COMM,0)+SAL,'$99999.99') from emp;
|
- 假设每位员工在进入公司满 10 年后的第一个 4 月 1
日,会给他发放“优质服务奖”,请列出每位员工的获奖时间
1
| select to_char(case when extract(month from (ADD_MONTHS(HIREDATE,120))) < 4 then ADD_MONTHS(trunc(ADD_MONTHS(HIREDATE,120),'yyyy'),3) else ADD_MONTHS(trunc(ADD_MONTHS(HIREDATE,120),'yyyy'),15) end,'yyyy-fmmm-dd') ,ename from emp;
|
- 列出员工号和姓名,所属部门名称,要求员工号用中文大写,例如“1234”输出为”壹贰叁肆
"
构造函数:
1
| select translate(rownum,'0123456789','零壹贰叁肆伍陆柒捌玖') ID,ENAME,DNAME from emp,dept where dept.deptno=emp.deptno;
|
问题解答
- To_date如果没有指定时分秒,缺省的时分秒是?
1
| select to_char(HIREDATE,'yyyy-fmmm-dd hh:mi:ss') from emp;
|
可以观察到,缺失默认值为12:00:00
- 如果指定的年份是45,那产生1945年还是2045年?
1
| SELECT TO_CHAR(TO_DATE('45-01-01','YY-MM-DD'),'YYYY-MM-DD') FROM dual;
|
1
| select length('李') from dual;
|
中文字符长度为1,中文(UTF-8)占3个字节。
1
| select lengthb('李') from dual;
|
1 2 3
| select substr('124abd数据库',1,1)from dual; select substr('124abd数据库',5,1)from dual; select substr('124abd数据库',7,1)from dual;
|
- Varchar2(10)的字段,可以放5个中文字符还是10个
1 2
| CREATE TABLE simuhw3(name varchar2(10)); insert into simuhw3(name) values ('数据库真难啊')
|
因为采用了UTF-8编码,只能容纳3个中文字符,若采用GBK编码,可以容纳5个。
数据泵
利用 Oracle 的“数据泵”功能 expdp/impdp 将上周创建的 500
万行的表转移到另外一台服务器上。
先对原主机使用sys
用户进行登录sqlplus,输入:
1
| Select * from dba_directories;
|
查看可以访问目录对象,并创建scott
可以访问对象
1 2
| CREATE OR REPLACE DIRECTORY test_dir AS '/u01/app/oracle/oradata/'; GRANT READ, WRITE ON DIRECTORY test_dir TO scott;
|
1
| expdp scott/tiger@Xe tables=simuhw2 directory=TEST_DIR dumpfile=simuhw2.dmp logfile=expdpsimuhw2.log
|
可以看到,在/u01/app/oracle/oradata/
目录中,已经存储了导出的文件
将其复制出来,拷贝到另一台机子
同理,在拷贝对象机子同样执行上述操作
1 2
| CREATE OR REPLACE DIRECTORY test_dir AS '/u01/app/oracle/oradata/'; GRANT READ, WRITE ON DIRECTORY test_dir TO scott;
|
执行
1
| impdp scott/tiger@Xe tables=simuhw2 directory=TEST_DIR dumpfile=simuhw2.dmp logfile=impdpsimuhw2.log
|
检查是否成功导入
1 2
| conn scott/tiger select count(*) from simuhw2;
|
成功导入
参考
- https://oracle-base.com/articles/10g/oracle-data-pump-10g