Oracle 获取当前时间的月份
select extract(year from sysdate) from dual;
--oracle 日期参数
--今天
SELECT to_char(SYSDATE,'yyyy-mm-dd') FROM dual
--昨天
SELECT to_char(SYSDATE - 1,'yyyy-mm-dd') FROM dual
--明天
SELECT to_char(SYSDATE + 1,'yyyy-mm-dd') FROM dual
--本周第一天,注意是周日还是周一
SELECT to_char(trunc(SYSDATE,'day'),'yyyy-mm-dd') FROM dual
--本周最后一天,注意是周日还是周一
SELECT to_char(trunc(SYSDATE,'day') + 6,'yyyy-mm-dd') FROMdual
--上周第一天,注意是周日还是周一
SELECT to_char(trunc(SYSDATE,'day') -7 ,'yyyy-mm-dd') FROMdual
--上周最后一天,注意是周日还是周一
SELECT to_char(trunc(SYSDATE,'day') -1 ,'yyyy-mm-dd') FROMdual
--当月第一天
SELECT to_char(trunc(SYSDATE,'month'),'yyyy-mm-dd') FROMdual
--当月最后一天
SELECT to_char(add_months(trunc(SYSDATE,'month'), 1)-1,'yyyy-mm-dd') FROM dual
--上月第一天
SELECT to_char(add_months(trunc(SYSDATE,'month'), - 1),'yyyy-mm-dd') FROM dual
--上月最后一天
SELECT to_char(trunc(SYSDATE,'month') -1,'yyyy-mm-dd') FROMdual
--下月第一天
SELECT to_char(add_months(trunc(SYSDATE,'month'), 1),'yyyy-mm-dd') FROM dual
--下月最后一天
SELECT to_char(add_months(trunc(SYSDATE,'month'), 2)-1,'yyyy-mm-dd') FROM dual
--当年第一天
SELECT to_char(trunc(SYSDATE,'year'),'yyyy-mm-dd') FROM dual
--当年最后一天
SELECT to_char(add_months(trunc(SYSDATE,'year') , + 12) -1,'yyyy-mm-dd') FROM dual
--去年第一天
SELECT to_char(add_months(trunc(SYSDATE,'year') , -12),'yyyy-mm-dd') FROM dual
--去年最后一天
SELECT to_char(trunc(SYSDATE,'year') - 1,'yyyy-mm-dd') FROMdual
--明年第一天
SELECT to_char(add_months(trunc(SYSDATE,'year') , +12),'yyyy-mm-dd') FROM dual
--明年最后一天
SELECT to_char(add_months(trunc(SYSDATE,'year') , + 24) -1,'yyyy-mm-dd') FROM dual
--年龄(按周岁)
SELECT trunc(months_between(sysdate,to_date('2000-01-01','yyyy-mm-dd')) / 12) FROM dual;
--年龄(自然年差)
SELECT cast(to_char(sysdate,'yyyy') AS INTEGER) -cast(to_char(to_date('2000-01-01','yyyy-mm-dd'),'yyyy') AS INTEGER) FROM dual;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL
#################################################################
使用utl_file包来将表的数据存储到外部文件
该实验的目的是将表的数据按照我们的格式写入到操作系统的文件,利用了数据库提供的包,将表中的数据保存在文本文件。
在初始化参数文件中加入下面一行
utl_file_dir=/home/oracle/bk
重新启动数据库
show parameter utl_file_dir
NAME TYPE VALUE
-------------- -------------------------
utl_file_dir string /home/oracle/bk
案例1:数据写入到文本中
declare
v_filehandleUTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('/home/oracle/bk','output.txt','w');
UTL_FILE.PUTF(v_filehandle,'SALARY REPORT: GENERATED ON%s\n', SYSDATE);
UTL_FILE.NEW_LINE(v_filehandle);
UTL_FILE.PUTF (v_filehandle,'%s\n','hello ');
UTL_FILE.PUTF (v_filehandle, 'DEPARTMENT:%s\n','world ');
UTL_FILE.PUTF(v_filehandle,'aaaa%sbbb%sccc%sddd%seee%s','1','2','3','4','5');
UTL_FILE.FCLOSE (v_filehandle);
end;
/
其中/n为换行
%s为替代字符,将来会被后面的1到5个参数替代,默认值为NULL
MEW_LINE过程建立一个新的空行。
案例2:将DEPT表的数据导入到文本中
declare
v_filehandle UTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('/home/oracle/bk','output.txt','w');
UTL_FILE.PUTF (v_filehandle,'表DEPT的文本数据,导出时间为:%s\n', SYSDATE);
UTL_FILE.NEW_LINE(v_filehandle);
for i in(select * from dept)loop
UTL_FILE.PUTF (v_filehandle,'%s ,%s, %s\n',i.deptno,i.dname,i.loc);
end loop;
UTL_FILE.FCLOSE (v_filehandle);
end;
/
案例3:将EMP表的数据导入到文本中
declare
v_filehandleUTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('/home/oracle/bk','output.txt','w');
UTL_FILE.PUTF (v_filehandle,'表EMP的文本数据,导出时间为:%s\n', SYSDATE);
UTL_FILE.NEW_LINE(v_filehandle);
for i in(select * from EMP)loop
UTL_FILE.PUTF (v_filehandle,'%s| %s |%s| %s| %s
|',i.EMPNO,i.ENAME,i.JOB,NVL(i.MGR,-1),i.HIREDATE);
UTL_FILE.PUTF (v_filehandle,'%s| %s |%s\n',i.SAL,NVL(i.COMM,-1),i.DEPTNO);
end loop;
UTL_FILE.FCLOSE (v_filehandle);
end;
/