`

基础语法2 总结

 
阅读更多
--  一章节

1.日期函数
  add_months()
  extract()
  round()
  trunc()
  last_day()
  next_day()
2.转换函数
  to_date()
  to_char()
  to_number()
3.锁
  行级锁:
    1.自动上锁
      insert 
      update 
      delete 
      select...for update
  表级锁:
    1.手动锁
      lock table emp in share mode; 

1.同义词
 grant create synonym to aniu;
  create synonym emp for scott.emp;
  create synonym e for emp;
  
  grant create public synonym to aniu;
  create public synonym pe for scott.emp;
 --查看同义词
 select * from user_synonyms;--数据字典

2.序列
create sequence seq
start with 1
increment by 2
maxvalue 30
minvalue -5
nocycle  --不循环产生序列号
cache 5;
 
--修改
alter sequence seq cycle;

--序列位列
1.nextval:序列下一个值
select seq.nextval from dual;
2.currval:序列当前值
select seq.currval from dual;

create table test(i number(6));
insert into test values(seq.nextval);
--查看序列
desc user_sequences;
select SEQUENCE_NAME from user_sequences;

3.视图
--普通视图 
grant create any view to scott;--授权
create or replace view v1
as
select empno,ename from emp;
--带检查约束的视图:不能通过视图修改条件数据
create or replace view v2
as
select empno,ename,sal from emp where sal>3000
with check option;
--只读视图
create or replace view v3
as
select empno,ename,sal from emp where sal<3000
with read only;
--错误视图
create or replace force view v4
as
select empno,ename,sal from emp2 where sal<3000
with read only;
--给列取别名的试图
create or replace view v5
as
select empno 编号,ename,sal from emp where sal<3000
with read only;

create or replace view v5
(编号,姓名,工资)
as
select empno,ename,sal from emp where sal<3000
with read only;

create or replace view v6
as
select empno,ename,dname from emp,dept
where emp.deptno(+)=dept.deptno;
-- 有+的是从表

4.索引
  1.标准:
    create index ind_bz on student(stuno);
  2.唯一:不能有重复值
    create unique index ind_un on student(name);
  3.组合:基于多列查询时
    create index ind_zh on student(name,address); 
    10001   10001
  4.反向键:适合连续值的列
    create index ind_fx on student(stuno) reverse;
  5.位图:适合于低基数列
    create bitmap index ind_bm on student(address);
  6.函数索引:字符型数据列
    create index ind_hs on student(lower(name));  
  



--二章节


1.创建同义词的语法
  create synonym sy_name for scott.dept;
2.创建序列的语法
  create sequence seq_name
  start with 1
  increment by 2
  maxvalue 1000000
  minvalue -100
  cycle
  cache 10;
  
  seq_name.nextval
	seq_name.currval
	
3.创建视图的语法
create force view v8
as
select * from emp
with read only;
4.索引的种类及语法
 1.标准
 2.唯一
 3.组合
 4.函数
 5.反向键
 6.位图
 
1.PL/SQL内容
  1.DML
  2.TCL
  3.游标控制
  4.SQL函数和运算符
2.支持的数据类型
  1.所有的SQL类型
  2.支持NULL
  3.Boolean
  4.属性类型:%type  %rowtype
3.组成部分
  1.声明部分[可选的]
  2.可执行部分
  3.异常处理部分[可选的]
  DECLARE  --声明
    ...
  BEGIN    --可执行
    ....
  EXCEPTION --异常
    ....
  END;
4.变量和常量
  1. v_empno number(4);
  2. v_ename varchar2(10):='scott';
  3. v_pi constant number default 3.14;
5.为变量赋值
  1.v_empno:=7788;
  2.select ename into v_ename from emp where empno=7788;
  
6.条件控制
  1.IF ... THEN ... END IF;
  2.IF ... THEN ... ELSE ... END IF;
  3.IF ... THEN ... ELSIF ... THEN ... END IF;
7.循环语句
  1.LOOP ... END LOOP;  --无条件循环
  2.WHILE 条件  LOOP ... END LOOP;  
  3.FOR i IN 1..10 LOOP ... END LOOP;


--pl/sql测试
set serveroutput on  --打开输出
begin
  dbms_output.put_line('世界上最简单的PL/SQL');
end;

--变量和常量
declare
  v_empno number(4);
  v_ename varchar2(10);
begin
	v_empno:=7788;
	select ename into v_ename from emp where empno=v_empno;
	dbms_output.put_line('姓名:'||v_ename);
end; 
/

--属性类型
declare
  v_empno number(4);
  v_ename emp.ename%type;
begin
	v_empno:=7788;
	select ename into v_ename from emp where empno=v_empno;
	dbms_output.put_line('姓名:'||v_ename);
end; 
/

declare
  v_empno number(4);
  v_emp emp%rowtype;
begin
	v_empno:=7788;
	select ename,sal into v_emp.ename,v_emp.sal from emp where empno=v_empno;
	dbms_output.put_line('姓名:'||v_emp.ename||',工资'||v_emp.sal);
end; 
/

--IF语句
declare 
  v_sex varchar2(2);
begin
	v_sex := '&sex';  --从屏幕接受输入
	if v_sex='男' then
	  dbms_output.put_line('先生...');
	elsif v_sex='女' then
	  dbms_output.put_line('女士...');
	else
	  dbms_output.put_line('人妖...');
	end if;
end;

--CASE语句
begin
	case '&性别'
	  when '男' then dbms_output.put_line('先生...');
	  when '女' then dbms_output.put_line('女士....');
	  else dbms_output.put_line('人妖...');
	end case;
end;

declare 
  v_sex varchar2(2);
begin
	v_sex := '&sex';  --从屏幕接受输入
	case 
	  when v_sex='男' then dbms_output.put_line('先生...');
	  when v_sex='女' then dbms_output.put_line('女士....');
	  else dbms_output.put_line('人妖...');
	end case;
end;

--LOOP、
declare
  v_num number:=1;
begin
	loop 
		/*if (v_num>5) then
		   exit;
		end if;	 
		*/
		exit when v_num>5;  --退出
	  dbms_output.put_line('loop: '||v_num);
	  v_num:=v_num+1;
	end loop;
end;
/

--while
declare
  v_num number:=1;
begin
	while v_num<=5
	loop
	  dbms_output.put_line('loop: '||v_num);
	  v_num:=v_num+1;
	end loop;
end;


--for
begin
	for v_num in 1..5 loop
	  dbms_output.put_line('loop: '||v_num);
	end loop;	
end;

--动态sql
declare
 v_sql varchar2(200);
 v_a number:=1;
 v_b varchar2(20):='hello';
begin
	v_sql:='create table test(a number(2),b varchar2(20))';
	--执行
	execute immediate v_sql;
	v_sql:='insert into test values(:a,:b)';
	execute immediate v_sql using v_a,v_b;
end;

--异常
declare 
  v_name emp.ename%type;
  v_i number;
begin
	select ename into v_name from emp;
	v_i:=5/0;
exception
  when TOO_MANY_ROWS then
    dbms_output.put_line('肉丝太多....');
  when ZERO_DIVIDE then
    dbms_output.put_line('除数不能为0');
  when others then
    dbms_output.put_line('未知异常');
end;
/

--自定义异常
declare
  v_sex varchar2(2);
  e_sex exception;--自定义异常
begin
	v_sex:='&sex';
	if v_sex!='男' and v_sex!='女' then
	  raise  e_sex;  --抛异常
	end if;
	exception
	  when e_sex then
	    dbms_output.put_line('性别搞错哒》。。。');
end;
	
 




--三章节
1.pl/sql支持的语句
  dml
  tcl
  游标
  函数和运算符
2.pl/sql的数据类型
  所有sql类型
  null
  boolean
  属性类型
    %type:
    %rowtype
3.为变量赋值
  a:=10;
  select ename,sal into a,s from emp where ...;
  
1.游标
  1.概念:在pl/sql中,用来查询,并指向集合的指针
  2.作用:逐行处理查询结果,以编程的方式访问数据
  3.类型:隐式游标、显示游标、ref游标
2.隐式游标
  1.在Pl/sql指向DML语句时自动创建
  2.名称:SQL
  3.属性
    1.%FOUND:有影响的行数返回true
    2.%NOTFOUNT:没有影响的行数返回true
    3.%ROWCOUNT:返回影响的行数
    4.%ISOPEN:是否打开
3.显示游标   
  1.作用:处理返回多行的结果集
  2.步骤:
    1.声明:CURSOR cur_name IS SELECT ....;
    2.打开:OPEN cur_name;
    3.提取记录:FETCH cur_name INTO var1,var2...;
    4.关闭:CLOSE cur_name;
4.REF游标
  1.执行动态指定SQL语句
  2.强ref游标:有return,约束了查询的结果集结构
    1.%rowtype
    2.自定义Record类型
  3.弱ref游标:没有return
    
--隐式游标
begin
	delete from emp where deptno=10;
	--判段执行的情况
	if sql%FOUND then
	   dbms_output.put_line('删除了'||sql%ROWCOUNT||'行记录');
	end if;
	if sql%notfound then
	   dbms_output.put_line('没有删除人...');
	end if;
end;

--显示游标
declare
  --声明
  cursor cur_name is 
     select empno,ename from emp;
  v_no emp.empno%type;
  v_name emp.ename%type;
begin
  --打开
  open cur_name;
  loop
    --提取数据
    fetch cur_name into v_no,v_name;
    --退出
    exit when cur_name%notfound;
    dbms_output.put_line(v_no||'  '||v_name);
  end loop;
  close cur_name; --关闭
end;

--带参数的游标
declare
  --声明
  cursor cur_name(no number) is 
     select empno,ename from emp where deptno=no;
  v_no emp.empno%type;
  v_name emp.ename%type;
begin
  --打开
  open cur_name(&no);
  loop
    --提取数据
    fetch cur_name into v_no,v_name;
    --退出
    exit when cur_name%notfound;
    dbms_output.put_line(v_no||'  '||v_name);
  end loop;
  close cur_name; --关闭
end;
  
  
--修改记录
declare
  --声明
  cursor cur_name is 
     select deptno,ename,sal from emp for update;
  v_no emp.deptno%type;
  v_name emp.ename%type;
  v_sal emp.sal%type;
begin
  --打开
  open cur_name;
  loop
    --提取数据
    fetch cur_name into v_no,v_name,v_sal;
    --退出
    exit when cur_name%notfound;
    if(v_no=10) then
      update emp set sal=sal+1000 where current of cur_name;
      v_sal:=v_sal+1000;
    end if;
    dbms_output.put_line(v_no||'  '||v_name||'  '||v_sal);
  end loop;
  close cur_name; --关闭
end;

--循环游标
declare
  cursor cur_name(no number)
   is select ename,deptno from emp where deptno=no;
begin
	for rec in cur_name(&no)
	loop
		dbms_output.put_line(rec.ename||'  '||rec.deptno);
	end loop;
end;

--弱类型ref游标
declare
  TYPE ref_cur_name IS REF CURSOR;--游标类型
  cur_name ref_cur_name;--游标变量
  v_name emp.ename%type;
  v_no emp.deptno%type;
begin
	--打开
	open cur_name for select ename,deptno from emp;
	loop
	  fetch cur_name into v_name,v_no;
	  exit when cur_name%notfound;
	  dbms_output.put_line(v_name||'  '||v_no);
	end loop; 
	close cur_name;
end;

--强ref游标
declare
  TYPE ref_cur_name IS REF CURSOR return emp%rowtype;--游标类型
  cur_name ref_cur_name;--游标变量
  v_emp emp%rowtype;
begin
	--打开
	open cur_name for select * from emp;--ename,deptno
	loop
	  fetch cur_name into v_emp;
	  exit when cur_name%notfound;
	  dbms_output.put_line(v_emp.ename||'  '||v_emp.deptno);
	end loop; 
	close cur_name;
end;

--自定义Record类型
declare
  TYPE rec_type IS RECORD(
    name emp.ename%type,
    deptno emp.deptno%type
  );--类型
  v_rev rec_type; --Record类型变量
  TYPE ref_cur_type IS REF CURSOR return rec_type;
  cur_name ref_cur_type;
begin
	open cur_name for select ename,deptno from emp where deptno=&no;
	loop
	  fetch cur_name into v_rev;
	  exit when cur_name%notfound;
	  dbms_output.put_line(v_rev.name||'  '||v_rev.deptno);
	end loop;
end;
/

 




--四章节

1.什么是游标
2.游标的分类
3.游标的四个属性
4.显示游标的操作步骤
5.如何定义和使用显示游标修改数据

1.过程
2.函数
3.程序包  

--最简单的存储过程
create or replace procedure p1
is
begin
	dbms_output.put_line('你好,.....');
end;

--调用
exec[ute] p1;

--IN 参数
create or replace procedure p2
(eno number)
as
  v_name emp.ename%type;
begin
	select ename into v_name from emp where empno=eno;
	dbms_output.put_line(v_name);
end;
/

--执行
execute p2(7788);  --按位置传参
execute p2(eno=>7788);  --按名称传参
call p2(7788);

--pl/sql调用
begin
	p2(&no);
end;

--OUT 参数
create or replace procedure p3
(eno IN number,name OUT varchar2)
as
begin
	select ename into name from emp where empno=eno;
end;
/

--调用
declare 
  v_name varchar2(20);
begin
  --p3(name=>v_name,eno=>7788);
  p3(7788,name=>v_name);
  dbms_output.put_line(v_name);
end;

--IN OUT 参数
create or replace procedure p4
(num1 IN OUT  number,num2 IN OUT number)
is
  num3 number;
begin
	num3 := num2; 
	num2 := num1;
	num1 := num3;
end;
/

--调用
declare
  v_1 number:=10;
  v_2 number:=20;
begin
	p4(v_1,v_2);
	dbms_output.put_line(v_1||'  '||v_2);
end;

--授予执行权限 
grant execute on p1 to aniu;

--简单的函数
create or replace function fun1
return varchar2
is
begin
	return '你好,朋友....';
end;

--调用
select fun1 from dual;
--pl/sql调用

declare 
 v_n varchar(20);
begin
	dbms_output.put_line(fun1);
	v_n := fun1;
	dbms_output.put_line(v_n);
end;

--调用
VAR v varchar2(20)  --声明全局变量
exec :v:= fun1;
print :v;


--带参数的函数
create or replace function fun2
(eno number)
return varchar2
is
  v_name varchar2(20);
begin
	select ename into v_name from emp where empno = eno;
	return v_name;
end;

--调用
declare
   v_name varchar2(20);
begin
	v_name:= fun2(&no);
	dbms_output.put_Line(v_name);
end;

--授权
grant execute on fun1 to scott;

--程序包规范
create or replace package pack1
is
CURSOR cur_fenye(page number,line number) return emp%rowtype;--声明游标
function fun2(eno number) return varchar2;  --声明函数
procedure p1(eno number);  --声明过程
procedure proc_fenye(page number,line number);--分页的存储过程
end pack1;


--程序包主题
create or replace package body pack1
is
 --实现游标
  CURSOR cur_fenye(page number,line number)
    return emp%rowtype IS
    select EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO  from(
    select rownum r,e.* from emp e where rownum<=page*line
    ) a where a.r>(page-1)*line;
    
  --实现函数
	function fun2
	(eno number)
	return varchar2
	is
	  v_name varchar2(20);
	begin
		select ename into v_name from emp where empno = eno;
		return v_name;
	end;
	
	--实现过程
	procedure  p1(eno number)
	is
	  v_name varchar2(20);
	begin
	  select ename into v_name from emp where empno=eno;
	  dbms_output.put_Line(v_name);
	end;
	
	--实现分页的存储过程
	procedure proc_fenye(page number,line number)
	is
	  v_emp emp%rowtype;
	begin
	  open cur_fenye(page,line);--打开
	  loop
	  	fetch cur_fenye into v_emp;
	  	exit when cur_fenye%notfound;
	  	dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' ' ||v_emp.sal);
	  end loop;
	  close cur_fenye;
	end;
end pack1;

--调用
select pack1.fun2(7788) from dual;
exec pack1.p1(7788);

--调用分页
exec pack1.proc_fenye(4,4);

--格式化列的现实
COLUMN LINE FORMAT 999
COLUMN TEXT FORMAT A70
SELECT line,text FROM USER_SOURCE WHERE NAME=UPPER('P2');

分享到:
评论

相关推荐

    JAVA基础语法总结

    这篇总结将深入探讨Java的基础语法,帮助初学者理解并掌握Java编程的核心概念。 **1. Java程序结构** Java程序由类(Class)组成,每个类都包含方法(Method)。程序执行始于main方法。例如: ```java public class...

    ES6 入门基础语法总结

    ES6 基础语法总结 ES6 是 ECMAScript 6 的简称,于 2015 年发布,是 JavaScript 语言的最新标准。ES6 引入了许多新的语法特性和功能,以提高开发效率和代码可读性。本文总结了 ES6 的基础语法,包括 let 与 const、...

    python基础语法总结(超详细).pdf

    下面是对Python基础语法的详细总结: 1. **环境搭建**:Python的安装通常通过官网下载相应版本的安装包,按照提示进行安装。安装完成后,可以通过命令行输入`python`或`python3`启动解释器。 2. **标识符**:...

    英语基础语法知识总结.doc

    【英语基础语法知识总结】 英语语法是学习英语的基础,它涉及到词汇、句子结构以及语法规则等多个方面。本文将对英语中的词类和句子成分进行详细的解析。 首先,我们要了解词类,它是语言中最小的可以独立运用的...

    2\1-1-Java基础语法_第2节 HelloWorld案例_笔记_P2.docx

    标题 "2\1-1-Java基础语法_第2节 HelloWorld案例_笔记_P2.docx" 表明这个资源是关于 Java 基础语法的第二节课,主要讲解 HelloWorld 案例。 描述解释 描述 "第2节 HelloWorld案例--更新了资源名称--更新了资源标签...

    MySQL基础语法总结--内有案例

    MySQL基础语法总结-新手教程 内容包括了: 1.SQL语言 的介绍 2.MySQL数据类型 3.约束类型 4.数据库语句 -表相关的语句-数据相关的语句 5.导入sql文件 6.DML语句(insert update delete)-truncate语句 7....

    css3基础语法总结大全

    以下是对CSS3基础语法的一些关键知识点的详细总结: 1. **选择器增强**: - **伪类和伪元素**:CSS3增加了许多新的伪类,如`:hover`, `:active`, `:focus`,以及`:nth-child()`, `:nth-last-child()`, `:first-...

    java基础语法 汇总

    ### Java基础语法汇总 本文将基于给定的文件信息,对Java的基础语法进行一次全面而深入的解析。Java作为一种广泛使用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着重要的地位。对于初学者而言,掌握...

    python基础语法总结.docx

    Python 基础语法总结 本篇文章将对 Python 的基础语法进行总结,涵盖标识符、数据类型、数据类型转换、运算符等知识点。 1. Python 标识符 在 Python 中,标识符由字母、数字、下划线组成,且不能以数字开头。 ...

    python基础总结_基础语法案例_python_

    在这个"python基础总结_基础语法案例_python_"的资料中,我们主要探讨的是Python的基础语法和一些实际的代码案例,旨在帮助初学者在两天内建立起坚实的Python编程基础。 一、变量与数据类型 Python中的数据类型包括...

    Java基础语法总结2.pdf

    JavaSE基础语法测试题库

    JavaSE 基础语法测试题库知识点总结 本资源摘要信息主要涵盖 JavaSE 基础语法测试题库的相关知识点,涵盖了环境变量、Java 源文件和编译后的文件扩展名、基本数据类型、时间转换、控制台输出、数组操作、排序算法、...

    Python基础语法:.pdf

    总结上述知识点,Python基础语法的学习包含以下内容:输入输出函数的使用(`print()`和`input()`),变量的定义和命名规则,数据类型的拼接方法(包括使用`+`、`%`和`.format()`),字符串的处理(包括转义字符和...

    20191009JavaSE的基础语法.md

    ### JavaSE的基础语法详解 #### 变量 变量在编程中是存储数据的基本单位,用于在程序执行过程中保存各类信息。 ##### 声明变量 - **语法**: `数据类型 变量名;` - **示例**: `int age;` - **初始化**: `数据类型...

    mysql DDL DML DCL基础语法总结练习

    该文档基于windows DOS命令行环境下进行DDL,DCL,DML基础语法练习,包括数据库,表的创建,删除,修改,子查询,表连接,用户创建,授权等。

    头歌python入门之基础语法答案.docx

    Python 基础语法答案 Python 是一种高级的、解释性的编程语言,广泛应用于...本文档总结了 Python 基础语法的多个方面,如变量、数据类型、运算符、控制结构、函数、模块等,旨在帮助读者快速掌握 Python 的基础知识。

    自己总结的一些Markdown基础语法

    ### Markdown基础语法详解 #### 一、Markdown简介与特点 Markdown是一种简单易学的轻量级标记语言,其设计初衷是为了让文档的编写更加轻松、高效,并能够转换成多种格式,如XHTML、HTML、PDF及Word等。Markdown的...

    html语法总结html语法总结html语法总结html语法总结

    以下是对HTML语法的一些关键点的详细总结: 一、网页整体布局 HTML文档通常由`&lt;html&gt;`标签开始,这是整个文档的根元素。在`&lt;html&gt;`标签内部,有两个重要的部分:`&lt;head&gt;`和`&lt;body&gt;`。 1. `&lt;head&gt;`部分包含了文档...

    unity3d脚本中文基础 javascapt语法基础

    总结,"unity3d脚本中文基础 javascapt语法基础"这个教程主要涵盖JavaScript的基础语法,包括变量、控制结构、函数、数组、对象,以及Unity3D特有的事件处理和API使用。通过学习这个教程,初学者可以快速掌握在Unity...

    第2章-Java语言基础语法.pptx

    Java语言基础语法 Java语言基础语法是Java程序设计的基础,涵盖了数据...本章节总结了Java语言基础语法的主要知识点,包括数据类型、变量、运算符、控制流语句和数组等内容。这些建议将为学习Java语言打下坚实的基础。

Global site tag (gtag.js) - Google Analytics