一、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. 全面介绍Windows内存管理机制及C++内存分配实例

    转自:http://blog.csdn.net/yeming81/article/details/2046193 本文基本上是windows via c/c++上的内容,笔记做得不错.. 本文背景: ...

  2. java.sql.Date转换

    ---恢复内容开始--- JAVA 处理时间 - java.sql.Date.java.util.Date与数据库中的Date字段的转换方法,以及util包下的Date类与字符串的相互转换 在java ...

  3. 大二暑假第一周总结--初次安装配置Hadoop

    本次配置主要使用的教程:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/ 以下是自己在配置中的遇到的一些问题和解决方法,或者提示 一.使用虚 ...

  4. aced六类股票问题

    一.状态转移框架 在我们刷题的过程中,很多同学肯定会遇到股票问题这类题目,股票问题有很多种类型,大多数同学都知道要用动态规划去做,但是往往写不对状态转移方程,我刚接触这类问题时也是一头雾水,但是掌握了 ...

  5. python刷LeetCode:14. 最长公共前缀

    难度等级:简单 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",& ...

  6. C++交换两个变量值的方法

    简单地列一下交换两个变量值地几种方法. 1.通过第三方实现,这一种也是最最最常见普通的方法: void swap(int *a, int *b) { int tmp = *a; *a = *b; *b ...

  7. 面试题:你使用过concurrent包下的那些类?

    1.executor接口,使用executor接口的子接口ExecutorService用来创建线程池2.Lock接口下的ReentrantLock类,实现同步,比如三个线程循环打印ABCABCABC ...

  8. C# 串口编程,扫码枪使用

    一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为 ...

  9. nodejs(15)express开启cors跨域

    express开启cors跨域 package.json "dependencies": { "body-parser": "^1.18.3" ...

  10. python 设置系统/用户环境变量

    系统环境变量 winreg.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' 用户环境变 ...