设置显示执行时间

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. c++ 图解快速排序算法

    第一.算法描述 快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法, 快速排序算法是采用分治思想的算法,算法分三个步骤 从数组中抽出一个元素作 ...

  2. Py修行路 Matplotlib 绘图及可视化模块

    Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...

  3. Oracle 设置主键自增长__Oracle

    转自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的 ...

  4. oracle 基础 执行sql文件

    Oracle执行外部文件: c:>sqlplus user/pwd@db sql>@new.sql 执行多个sql文件: 1.把所有的文件都放在同一个目录下,然后在命令行里执行命令:    ...

  5. 2016上海浦东汽车展览会C+罩杯 车模名单

    只能帮你们到这了

  6. html乱码原因与网页乱码解决方法

    造成html网页乱码原因主要是html源代码内中文字内容与html编码不同造成.但无论是哪种情况造成乱码在网页开始时候都需要设置网页编码. charset编码设置 html网页乱码效果截图 一.乱码造 ...

  7. MyBatis总结七:动态sql和sql片段

    开发中,sql拼接很常见,所以说一下动态sql: 1 if 2 chose,when,otherwise 3 where,set 4 foreach 用法解析(现有一张users表 内有id user ...

  8. 用fontcreator创建了一个半成品的字体

    下效果,哈哈. 为啥说半成品呢?因为只制作了0到9这几个字符,其他的字母.汉字.符号啥的都没有制作,唯一感觉就是字体设计是一个非常有设计感的活儿,而且需要付出很多的精力,尤其是汉字字体,常见的有6k多 ...

  9. 使用IDEA编译spark 1.5并运行example的代码

    操作系统:windows 10 IDEA : IDEA 14.1.4 1:使用IDEA导入spark 1.5的源码,注意maven配置为自动导入 2:在maven窗口下的profiles中勾选hado ...

  10. Python--socket和threading编程

    网络编程基础(一) TCP/IP协议 OSI/RM协议 特点:独立于计算机硬件和操作系统,统一分配网络地址,提供可靠服务,隔离了物理网络的硬件差异 协议分层(百度):网络接口层:IEE802.3(以太 ...