`
sjk2013
  • 浏览: 2183392 次
文章分类
社区版块
存档分类
最新评论

PL/SQL学习一

 
阅读更多

1、PL/SQL块基本组成:

DECLARE 
/*
 * 定义部分---定义常量、变量、复杂数据类型、游标等(可选的)
*/
BEGIN
/*
 * 执行部分---PL/SQL及SQL语句的执行(必须的)
*/
EXCEPTION
/*
 * 异常处理部分---处理运行错误(可选的)
 */
END; -- 块(block)结束标记

-- ex:pl/sql_1
BEGIN 
  dbms_output.put_line('Hello,PL/SQL'); -- dbms_output是oracle提供的系统包,put_line是它的一个过程
END;

-- ex:pl/sql_2
DECLARE 
  v_ename VARCHAR2(5);
BEGIN
  SELECT ename INTO v_ename FROM emp
  WHERE empno=&no;  -- &no为替代变量
  dbms_output.put_line('雇员名:'||v_ename);  
 EXCEPTION  --异常处理
   WHEN NO_DATA_FOUND THEN 
     dbms_output.put_line('请输入正确的雇员编号!');
END;


2、匿名块
没有名称的PL/SQL块成为匿名块,它可以内嵌到应用程序中使用,也可以在sqlplus中使用。
(ex:sql_1与ex:sql_2都属于匿名块)


3、命令块
具有特定名称标识的PL/SQL块,使用<<>>加以标记。


4、子程序
子程序包括过程、函数和包。使用PL/SQL开发程序的时候,既可以开发客户端的子程序也可以开发服务端的子程序,
客户端子程序主要用在Developer中,服务端子程序可应用在任何应用程序中。


一、过程(procedure)
可以指定输入(in)输出(out)参数。

-- ex:pl/sql_3
CREATE OR REPLACE PROCEDURE UPD_SHIPDATE(V_ORDID NUMBER, V_SHIPDATE DATE) 
IS
  E_NO_ROW EXCEPTION;-- 创建过程,输入参数为V_ORDID,V_SHIPDATE
BEGIN
  UPDATE SCOTT.EMP
     SET SCOTT.EMP.HIREDATE = V_SHIPDATE
   WHERE SCOTT.EMP.EMPNO = V_ORDID;
  IF SQL%NOTFOUND THEN  --如果没有对应的V_ORDID则抛出异常
    RAISE E_NO_ROW;     --抛出异常
  END IF;
EXCEPTION
  WHEN E_NO_ROW THEN
    RAISE_APPLICATION_ERROR(-20004, 'no this number');-- 输出错误信息
END UPD_SHIPDATE;


在sqlplus执行过程时候,可以使用execute 过程名(参数) 或者call 过程名(参数) 执行。

二、函数(function)
函数用于返回特定数据。函数头部必须包含return子句,在函数体内必须要包含return语句返回数据。

-- ex:pl/sql_4
CREATE OR REPLACE FUNCTION TEST(NAME VARCHAR2) RETURN NUMBER IS
  AN_TEST NUMBER(7, 2);-- 返回值
BEGIN
  SELECT SAL * 12 + NVL(COMM, 0)
    INTO AN_TEST
    FROM SCOTT.EMP
   WHERE LOWER(ENAME) = LOWER(NAME);
  RETURN AN_TEST;-- 返回
END;


在sqlplus执行函数:

方法1:

1  begin
2  dbms_output.put_line(TEST('SCOTT'));
3* end;


方法2(注意函数内有DML操作的不能用此方法):

select TEST('SCOTT') from dual;


方法3:

var a number(7,2);
exec :a:=TEST('SCOTT');
print a


三、包(package)
包用于组合过程和函数,它由包头和包体组成。包头主要是声名各个过程与函数,包体实现(注意:包头、包体要分开编译)

-- ex:pl/sql_5
-- 包头
CREATE OR REPLACE PACKAGE EMP_TEST IS
PROCEDURE UPD_SHIPDATE(NAME VARCHAR2,newsal NUMBER);
FUNCTION TEST(NAME VARCHAR2) RETURN NUMBER;
END;
-- 包体
CREATE OR REPLACE PACKAGE BODY EMP_TEST IS
 PROCEDURE UPD_SHIPDATE(NAME VARCHAR2,newsal NUMBER) 
 IS
BEGIN
UPDATE SCOTT.EMP 
SET SCOTT.EMP.sal = newsal 
WHERE lower(SCOTT.EMP.ename) = NAME; 
END UPD_SHIPDATE; 

FUNCTION TEST(NAME VARCHAR2) RETURN NUMBER 
IS
  AN_TEST NUMBER(7, 2);
BEGIN
  SELECT SAL * 12 + NVL(COMM, 0)
    INTO AN_TEST
    FROM SCOTT.EMP
   WHERE LOWER(ENAME) = LOWER(NAME);
  RETURN AN_TEST;
END TEST;
END EMP_TEST;

调用 SELECT emp_test.test('scott') from dual; 进行测试

四、触发器(Trigger)
触发器是指隐含执行的过程。只有insert、update、delete这3类触发器。

-- ex:pl/sql_6
CREATE OR REPLACE TRIGGER update_cascade
  AFTER UPDATE of deptno on dept -- 在更新后触发
  FOR each row
BEGIN
 UPDATE emp SET deptno=:new.deptno --new为deptno新值(更新后的值)
 WHERE deptno=:old.deptno;         --old为deptno旧值(更新前的值)
END;


只要对表dept的deptno列有更新即触发该触发器,触发器自动执行。

分享到:
评论

相关推荐

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL学习官方教材,英文版,覆盖了PL/SQL的所有知识,适合入门者或作为参考资料.

    PL/SQL学习笔记

    PL/SQL从入门到精通学习帮助手册,PL/SQL简介,PL/SQL操作,存储过程,触发器等

    Oracle PL/SQL语言初级教程

    Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序,...

    pl/sql数据库学习笔记

    pl/sql数据库学习笔记,包含一些基础知识,和案例代码

    oracle10g_pl/sql

    oracle10g pl/sql完备教程,供初学者学习与开发者参考

    oracle PL/SQL pdf学习资料

    oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料

    PL/SQL学习资料

    这是我在学习PL/SQL中总结的一些东西,希望对他家有帮助.

    pl/sql 学习资料

    pl/sql资料,很全面的,共十一个pdf文件,感兴趣的可以下下看.

    PL/SQL学习总结

    PL/SQL学习总结是本人学习ORACLE报表开发及FROM开发的总结,包括存储程序及,包等

    Oracle 12c PL/SQL程序设计终极指南

    PL/SQL本身涉及的知识点浩瀚、庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核心,循序渐进,尽可能为学习者提供“捷径”,仅仅只是这...

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    oracle 中 pl/sql 只是学习方法

    oracle 中 pl/sql 只是学习方法,喜欢 oracle 的朋友都下了看看吧

    PL/SQL学习教程,附笔记

    PL/SQL学习教程,包括相应的代码以及相关的学习笔记,适合初学者快速入门。

    pl/sql学习笔记

    一个很好的学习 pl/sql的入门文章 作者总结的非常好 非常适合入门学者

    Oracle Advanced PL/SQL Developer Professional Guide

    本书也是准备专业1Z0-146认证的所有准级PL / SQL程序员的理想指南。本书假设您具有PL / SQL编程的先验知识。 本书介绍了PL / SQL的高级功能,这些功能是设计和优化数据库应用程序中PL / SQL代码所必需的。集合,...

    pl/sql学习文档

    PL/SQL x学习常见用法,学习从最基本开始!

    最容易上手的PL/SQL学习教程-有经过测试的丰富案例

    最容易上手的PL/SQL学习教程-有经过测试的丰富案例,可以直接复制代码至SQL*PLUS中运行,知识点精确明了,是快速学习PL/SQL的绝好资料。

    pl/sql编写的模拟院校招生系统源码

    pl/sql编写的院校招生系统(通过包、存储过程、触发器、视图等完成的),可供学习oracle数据库pl/sql编程使用

    pl/sql相关学习文档

    pl/sql中的一些基本概念,讲解了pl/sql语句的编写方法。其中包含了pl/sql的简单语句、循环语句、条件语句等的相关知识,重点介绍了存储过程、函数、游标、触发器等的编写和运用。

    精通Oracle 10g PL/SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量...

Global site tag (gtag.js) - Google Analytics