设置显示执行时间

set timing on;

不显示:off

最简单的块:

 begin dbms_output.put_line('Hello,World');
end;

执行结果出现这种情况(执行成功,但是不显示字符串):

这时的解决办法是:在执行块之前,先执行这条语句: set serveroutput on   (可以理解为开关,把输出这个功能打开)

这时就成功了。

格式化命令:

设置每行显示的记录长度: SET LINESIZE 300

设置每页显示的记录长度:SET PAGESIZE 30

使用@执行程序

查看所有的数据表: SELECT * FROM tab;

查看当前的用户:show user

切换登陆用户: CONN 用户名/密码 【as sysdba】

对于每一张表,都有其属于的用户,不同的用户想要访问的其它用户的表,需要这张表的完整名称,及用户名.表名称

调用本机的指令,在前面加 HOST ,例如 HOST copy d:\demo.sql d:hello.sql

游标

一.For循环游标

基本的步骤是: 1.定义游标----2.定义游标变量----3.循环游标

--声明游标 CURSOR cursor_Name IS  select_sattement
--For循环游标
--()定义游标
--()定义游标变量
--()使用For循环来使用这个游标
declare
cursor c_job --定义游标
is
select emp.empno,emp.ename,emp.job,sal
from emp
where job='MANAGER';
--定义游标变量
c_row c_job%rowtype;
begin
for c_row in c_job loop --循环游标
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;

二.Fetch游标

--Fetch游标
--使用的时候必须要明确的打开和关闭
declare
cursor c_job
is
select empno,ename,job,sal
from emp
where job!='MANAGER';
c_row c_job%rowtype;
begin
open c_job;
loop
fetch c_job into c_row;
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
close c_job;
end;

下面是一个根据日期,更新表中每一行的是周几的游标例子

--游标练习,根据日期,更新每行是周几
DECLARE
CURSOR c_date
IS
select DIM_TIME.DATE_ID,DIM_TIME.YEAR_MONTH
FROM DIM_TIME;
c_row c_date%rowtype;
begin
for c_row in c_date loop
update DIM_TIME set Dim_Time.Week_Name=to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'DAY')
where Dim_Time.Date_Id=c_row.Date_ID;
end loop;
end;

下面是一个时间维度表的练习,包括创建表,利用函数 、存储过程 、游标等知识,更新表中其他的字段

 --创建时间维度表,粒度精确到天
CREATE TABLE DIM_TIME(
Date_ID char(8) primary key, --时间主键 例如20160703
Year_Month char(6), --年月 201607
Year number, --年 2016
Year_Quarter char(6), --年季度 2016Q3
Year_Half char(6), --年和上下半年 2016H2
Half_Number number, --上下半年 2
Half_Name char(2), --上下半年名称 H2
Quarter_Name char(2), --季度名称 Q3
Quarter_Number number, --季度 3
Month char(3), --月份 JUN
Month_Number number, --
Month_Name varchar2(10), --JUNL
Month_Dedak char(4), --月和上中下旬 07D1
Week char(3), --星期 SUN
Week_Number number, --
Week_Name varchar2(10)); --SUNDAY
--约束
/*限定月份在1至12月之间*/
ALTER TABLE DIM_TIME add constraint MonthCheck
check(Month in('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'));
ALTER TABLE DIM_TIME add constraint MonthNumberCheck
check(Month_Number in (1,2,3,4,5,6,7,8,9,10,11,12));
alter table DIM_TIME
drop constraint MonthCheck;
--华丽的分割线----- /*此处练习存储过程和Merge into 的用法*/
CREATE OR REPLACE PROCEDURE SP_Update_Date
(
uDate_ID char
) IS
BEGIN
-- UPDATE DIM_TIME SET DIM_TIME.DATE_ID=uDate_ID
-- WHERE DIM_TIME.DATE_ID='20160701';
merge into Dim_Time t
using (select * from DIM_TIME) v
on (t.date_ID=v.date_ID)
when matched then
update set
t.year_month=Substr(v.date_id,1,6),
t.year=Substr(v.date_id,1,4),
t.year_quarter=Substr(v.date_id,1,4),
t.year_half=Substr(v.date_id,1,4),
t.half_number=2,
t.half_name='H2',
t.quarter_number=3,
t.quarter_name='Q3',
t.month='Jul',
t.month_number=7,
t.month_name='Jule';
END; --根据日期获取上半年还是下半年的函数
CREATE OR REPLACE FUNCTION getYearHalf(iDate Date)
RETURN number IS
v_month char(2);
half number;
begin
select to_char(iDate,'MM') into v_month from dual;
half :=to_number(v_month) ;
if half>6 then
half:=2;
else
half:=1;
end if;
return half;
end; --游标练习,根据日期,更新每行是周几(块的练习)
DECLARE
CURSOR c_date
IS
select DIM_TIME.DATE_ID,DIM_TIME.YEAR_MONTH
FROM DIM_TIME;
c_row c_date%rowtype;
begin
for c_row in c_date loop
update DIM_TIME set Dim_Time.Week_Name=to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'DAY')
where Dim_Time.Date_Id=c_row.Date_ID;
end loop;
end;
--创建空的存储过程
CREATE OR REPLACE PROCEDURE SP_Upadte AS
BEGIN
NULL;
END;
--创建带参数的存储过程
CREATE OR REPLACE PROCEDURE SP_Upadte
( Id in number,
Name out nvarchar2 )
AS
Sex char(2);
Class varchar2(20);
BEGIN
NULL;
END; --创建更新date的存储过程(利用游标)
CREATE OR REPLACE PROCEDURE SP_Update_Date
AS
v_Half number;
v_Quarter number;
v_Month VARCHAR2(10);
v_Dedak number;
v_Week VARCHAR2(10);
CURSOR c_date IS
SELECT DATE_ID,YEAR_MONTH FROM DIM_TIME;
c_row c_date%rowtype;
BEGIN
for c_row in c_date loop --循环游标
v_Month:=to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MONTH'); --月份名称
v_Week:=to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'DAY'); --星期名称
v_Dedak:=to_number(Substr(c_row.date_id,7,2));--(日期最后几号)日
if(to_number(to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MM'))<7) then
v_Half:=1; --上半年
else
v_Half:=2; --下半年
end if;
if(to_number(to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MM'))<4) then
v_Quarter:=1; --季度
elsif(to_number(to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MM'))<7) then
v_Quarter:=2;
elsif(to_number(to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MM'))<10) then
v_Quarter:=3;
else
v_Quarter:=4;
end if;
if v_Dedak<11 then
v_Dedak:=1;
elsif v_Dedak<21 then
v_Dedak:=2;
else
v_Dedak:=3;
end if;
--这里也可以直接调用写好的函数
-- v_Half:=getYearHalf(to_Date(c_row.DATE_ID,'YYYYMMDD'));
update DIM_TIME set
year_month =Substr(c_row.date_id,1,6), --根据Date_ID得到year_Month
year=Substr(c_row.date_id,1,4), --得到年份
year_quarter=Substr(c_row.date_id,1,4)||'Q'||v_Quarter, --得到年和季度
year_half=Substr(c_row.date_id,1,4)||'H'||v_Half,
half_number=v_Half,
half_name='H'||v_Half,
quarter_name= 'Q'||v_Quarter,
quarter_number= v_Quarter,
month=Substr(v_Month,1,3),
month_number=to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'MM'),
month_name=v_Month,
MONTH_DEDAK=Substr(c_row.date_id,5,2)||'D'||v_Dedak,
week=Substr(v_Week,1,3),
week_number=to_number(to_char(to_Date(c_row.DATE_ID,'YYYYMMDD'),'D')),
week_name=v_Week
where DIM_TIME.DATE_ID=c_row.DATE_ID;
end loop;
END;

Oracle创建自增字段方法(序列:SEQUENCE)

1.最简单的序列,从1开始,自增1

 --创建单独的序列
CREATE SEQUENCE DIM_TIME_log_id_seq
increment by 1 start with 1;

2.稍微完整点的序列是如下:

--创建序列
CREATE SEQUENCE SEQ_ID
MINVALUE 1 --最小值
MAXVALUE 9999 --最大值
START WITH 1 --从1开始
INCREMENT BY 1 --增1
CYCLE --到了9999后从头开始循环,此处可以为NOCYCLE
NOCACHE; --没有缓存,此处可以为CACHE 10

两个重要的函数:

  • SEQ_ID.CURRVAL  返回SEQ_ID的当前值
  •   SEQ_ID.NEXTVAL   返回SEQ_ID的下一个值(增加后的至)

Oracle返回一个时间段

比如从2013年1月1日到2014年1月1日的所有日期

SELECT DATE'2013-1-1'+(ROWNUM-1) FROM dual
CONNECT BY rownum < (date'2014-1-1'-date'2013-1-1');

还有从某个日期往后多少天

SELECT to_date('2013-1-1','YYYY-MM-DD')+(rownum-1) from dual
CONNECT BY rownum<=10;

SQL设置显示执行时间

SET TIMING ON ;  //不显示即为off;

SET TIMING ON;

ORACLE实现分页的功能:

SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM  TABLE_NAME) A WHERE ROWNUM<=10) WHERE RN>=5 ;

oracle小知识的更多相关文章

  1. Oracle小知识_长期总结

    更新时间:2018年7月16日 11:22:28 一. 系统 1. 打开防火墙后 Oracle 无法链接 新建1521端口规则. 二.知识 A. 序列 1. nextval ------------- ...

  2. oracle 小知识

    oracle: 数值随机的函数是 dbms_random.value(最大值,最小值)   用法是select dbms_random(3,0) from dual; oracle: 获取前100条 ...

  3. oracle小知识总结

    1,表列的五种约束 not null, unique,primary key, foreign key, check 2,权限分配 grant 权限 on 表 to 用户 3,表和视图的区别 视图是一 ...

  4. Oracle常用知识小总结

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...

  5. 简述Python入门小知识

    如今的Python开发工程师很受企业和朋友们的青睐,现在学习Python开发的小伙伴也很多,本篇文章就和大家探讨一下Python入门小知识都有哪些. 扣丁学堂简述Python入门小知识Python培训 ...

  6. Oracle基础知识汇总一

    Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...

  7. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  8. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  9. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

随机推荐

  1. SA读书笔记1

    SA的基本任务: 帐户: 为新用户增设帐号,将不再活动的帐号删除,帐号存活期事务(忘记密码等).把用户的主目录放在什么位置.在哪些机器上创建帐号. 硬件:识别并使用新硬件.对于虚拟化:设备可能要安装在 ...

  2. [iOS]UIImageView增加圆角

    [iOS]UIImageView增加圆角 "如何给一个UIImageView增加圆角?有几种方法?各自区别?" 备注:本文参考自http://www.jianshu.com/p/d ...

  3. Python函数(一)-return返回值

    定义一个函数可以在最后加上return返回值,方便查看函数是否运行完成和返回函数的值 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR&qu ...

  4. 第三章 Java内存模型(下)

    锁的内存语义 中所周知,锁可以让临界区互斥执行.这里将介绍锁的另一个同样重要但常常被忽视的功能:锁的内存语义 锁的释放-获取建立的happens-before关系 锁是Java并发编程中最重要的同步机 ...

  5. LinearLayout线性布局搭配权重属性的使用

    在开发中,我们是通过布局来完成应用界面的搭配的,通过各种布局,我们可以完成各种复杂的界面设计.而LinearLayout也就是我们说的线性布局,这个比较简单而且使用很广泛的一种布局.下面我们通过一个D ...

  6. 请用fontAwesome代替网页icon小图标(转)

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  7. go语言linux下安装

    1.从http://golang.org/dl/下载最新版本的GO语言二进制档案包. 注意:根据操作系统和计算架构正确选择档案包 2.使用tar命令将档案包解压到/usr/local目录中.具体方法如 ...

  8. Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题

    解决下载(或叫:爬取)到的网页乱码问题 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 20 ...

  9. apt-get默认下载路径

    备忘: Ubuntu中apt-get下载的安装包都在哪里呢? 在/var/cache/apt/archives里,里边的安装包可以取出来以备后用.

  10. 记得适当的声明成员函数为const.

    如果确信一个成员函数不用修改它的对象,就可以声明它为const,这样就可以作用于他的const对象了.因为const对象只能调用它的const方法. template<class T> c ...