一、oracle的pl/sql的概念

pl/sql是oracle在标准的sql语言上的扩展,不仅允许嵌入sql,还允许定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能更强大。

1.过程、函数、触发器是pl/sql编写的

2.过程、函数、触发器是在oracle中

3.pl/sql是非常强大的数据库过程语言

4.过程、函数可以在java程序中调用

优点:增加程序的程序化编程、减少网络传输等、提高安全性、应用程序的运行性能

缺点:移植性不好

二、pl/sql的编程语言(包括函数、过程、触发器、包等)

简单例子:编写一个存储过程,该过程可以向某表中添加记录

create or replace  procedure sp_prol is 

begin

insert into mytest values('djw','m124');

end;

/

show error 查看错误

1) exec 过程名(参数值1,参数值2....)

2)call  过程名(参数值1,参数值2....)

1.pl/sql的编程最小的基础单位是块,用块可以编写过程、函数、触发器、包

2.编写规范:

定义变量为v_

定义常量为c_

定义游标_cursor

定义例外e_

3.块由3个部分构成:定义部分(declear),执行部分(begin)、例外部分(exception)

实例:

1.dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。

set serveroutput on;
begin
dbms_output.put_line('hello,word');
end;
/

2.写一个块如下,可以输入变量:

declare
    v_name varchar2(5);
begin
     select ename into v_name from emp  where empno=&no;
     dbms_output.put_line('雇员名'||v_name);
end;
/

3.写一个块如下,可以输入变量且输入例外:

declare
  v_name varchar2(5);
begin 
   select ename into v_name from emp where empno=&no;
   dbms_output.put_line('雇员名:'||v_name);
exception
   when no_data_found then
   dbms_output.put_line('朋友,你的编号输入有误');
end;
/

4.过程:过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分,通过在过程中输出参数,可以将执行部分的数据传递到应用环境。

实例:

1)请写过程,输入雇员的名,新的工资,修改雇员的工资

create procedure  sp_pro3(spName varchar2,newSal number) is
begin
  update emp set sal=newSal where ename=spName;
end;
/

2)如何调用过程两种方法

exec  \call

5.函数:函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句,而在函数体内必须return语句返回的数据,我们可以使用create  function来建立函数

6.包:包用于在逻辑上组合过程和函数,由包规范和包体组成

----创建包sp_package
create package sp_package is
procedure update_sal (name varchar2,sal number);
function annual_income(name varchar2) return number;
end;
--创建具体的包体sp_package
create package body sp_package is
procedure update_sal(name varchar2,sal number)
  is
  begin
     update emp set sal=sal where  ename=name;
  end;
function annual_income(name varchar2)
  return number is
  annual_salary number;
  begin
      select sal*12+nvl(comm,0) into annual_salary from emp
      where ename=name;
   return annual_salary;
   end;
   end;

    /

7.定义和使用变量

标量:

1)v_name varchar2(10);

2)v_sal   number(6,2);

3)v_sal2  number:=5.4---表示赋值,初始值

4)v_hiredate  date

5)  v_valid   boolean  not null  default false;

存放最普通的变量:

1)declare
  c_tax_rate number(3,2):=0.03;
  v_ename  varchar2(5);
  v_sal  number(7,2);
  v_tax_sal number(7,2);
begin
  select ename,sal into v_ename,v_sal from emp where empno=&no;
  v_tax_sal:=v_sal*c_tax_rate;
  dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'
||v_tax_sal);
end;

/

2)declare
  c_tax_rate number(3,2):=0.03;
  v_ename  emp.ename%type;
  v_sal  emp.sal%type;
  v_tax_sal number(7,2);
begin
  select ename,sal into v_ename,v_sal from emp where empno=&no;
  v_tax_sal:=v_sal*c_tax_rate;
  dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'
||v_tax_sal);
end;

复合变量:用于存放多个值的变量

declare

type emp_record_type is record(

name  emp.ename%type,

salary emp.sal%type,

title emp.job%type);

sp_record emp_record_type;

begin

select ename,sal,job into sp_record from emp where empno=7788;

dbms_output.put_line('员工名'||emp_record.name);

end;

参照变量:

参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间,在编写pl/sql程序时,可以使用游标变量和对象类型变量两种参照变量类型。

1)请使用pl/sql编写一个块,可以输入部门号,并显示该部门

set serveroutput on;

declare

--定义游标

type sp_emp_cursor is ref  cursor;

--定义一个游标变量

test_cursor sp_emp_cursor;

--定义变量

v_ename emp.ename%type;

v_sal  emp.sal%type;

begin

open  test_cursor  for  select ename,sal from  emp  where deptno=&no;

loop

fetch test_cursor into v_ename,v_sal;

exit  when test_cursor%notfound;

dbms_output.put_line('名字'||v_ename||'工资:'||v_sal);

end loop;

end;

if语句的用法

create or replace  procedure sp_pro6(spName varchar2(10)) is
v_sal emp.sal%type
begin
  select sal into v_sal from emp where ename=spName;
if v_sal<2000  then
  update emp set sal=sal+sal*10% where ename=spName;
end if;
end;

3种循环(for循环省略)

create or replace procedure sp_pro6(spName varchar2) is
v_num  number:=1;
begin
  loop
    insert into users values(v_num,spName);
    exit when v_num=10;
    v_num:=v_num+1;
  end loop;
end;
--
create or replace procedure sp_pro6(spName varchar2) is
v_num  number:=1;
begin
while v_num<=20 loop
    insert into users values(v_num,spName);
    v_num:=v_num+1;
  end loop;
end;

自定义例外:

视图:视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(视图是随表的变化而变化)

1)视图不占磁盘空间

2)视图有利于提高安全性,不同用户看到的视图不同

3)视图不能增加索引

4)视图可以简化复杂查询

5)视图和视图也可以进行关联查询

创建视图:

create view 视图名 as select xxx with read only

9.windows-oracle实战第九课--plsql的更多相关文章

  1. Tensorf实战第九课(自编码AutoEncoder)

    本节我们将了解神经网络进行非监督形式的学习,即autoencoder自编码 假设图片经过神经网络后再输出的过程,我们看作是图片先被压缩然后解压的过程.那么在压缩的时候,原有的图片质量被缩减,解压时用信 ...

  2. 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案

    内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...

  3. 解决Windows x64bit环境下无法使用PLSQL Developer连接到Oracle DB中的问题

    本文是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/46416455 解决Windows x64bit环境下无法使用PLSQ ...

  4. 【C语言探索之旅】 第一部分第九课:函数

    内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  5. Windows10 下安装 oracle 客户端,安装 plsql 破解并实现汉化

    一,软件准备 1,win10 操作系统 2,oracle_11g_r2 client 这里是 64 位的软件  3, plsql 11.0.6 这里我们下载 64 的,32 位操作系统现在已经很少了, ...

  6. NeHe OpenGL教程 第九课:移动图像

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. oracle在SQLPLUS 和PLSQL建 job 的区别

    oracle在SQLPLUS 和PLSQL建 job 的区别 //建立job variable test_job_really number; begin dbms_job.submit(:test_ ...

  8. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  9. Python第九课学习

    Python第九课学习 数据结构: 深浅拷贝 集合set 函数: 概念 创建 参数 return 定义域 www.cnblogs.com/yuanchenqi/articles/5782764.htm ...

随机推荐

  1. js中数字的4种遍历方式

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  2. PHP日期函数

    在正式学习日期函数前大家得了解几个概念: 1.时区 2.世界时 3.unix时间戳 时区 这个概念,之前大家听说过很多.我们来啰嗦两句,我们现实生活中使用的实区,在电脑里面也是一样有规定的.1884年 ...

  3. python-局域网内实现web页面用户端下载文件,easy!

    好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货 先说需求:某个文件压缩之后可以供用户点击下载 没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个 ...

  4. 苹果maccms网站漏洞进行修复解决方法教程

    上期发现视频名称中包含木马文件 然后教大家使用标签进行过滤 {$vo.vod_name|mac_filter_html} 可是最近发现现在黑客行为是全字段挂马,修改数据字段格式挂马,多重嵌套挂马. 真 ...

  5. java集合对象实现原理

    1.集合包 集合包是java中最常用的包,它主要包括Collection和Map两类接口的实现. 对于Collection的实现类需要重点掌握以下几点: 1)Collection用什么数据结构实现? ...

  6. Learning Combinatorial Embedding Networks for Deep Graph Matching(基于图嵌入的深度图匹配)

    1. 文献信息 题目: Learning Combinatorial Embedding Networks for Deep Graph Matching(基于图嵌入的深度图匹配) 作者:上海交通大学 ...

  7. SpringMVC_执行原理

    什么是SpringMVC 概述 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架. 查看官方文档:https://docs.spring.io ...

  8. CodeForces - 748B Santa Claus and Keyboard Check

    题意:给定两个字符串a和b,问有多少种不同的字母组合对,使得将这些字母对替换字符串b后,可以变成字符串a.注意字母对彼此各不相同. 分析:vis[u]记录与u可形成关系的字母,若u与v不同,则形成字母 ...

  9. 对CI框架中几个文件libraries

    对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知    时间:2014-10-20 11:37   阅读数:117   作者:xbdadmin [导读] 1.lib ...

  10. textField 基本属性

    _textField.frame = CGRectMake(0, 0, 200, 50); _textField.delegate = self; _textField.text = str; [_t ...