码迷,mamicode.com
首页 > 数据库 > 详细

pl/sql

时间:2017-05-17 21:00:48      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:har   cot   dna   插入   output   ber   触发器   bms   log   

http://www.cnblogs.com/huyong/archive/2011/05/10/2041951.html#_Toc15837

 


SQL语言只是访问、操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发。PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。

提示:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE  table  等)的话,只能以动态的方式来使用。

pl/sql source program的基本单元是块
PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。
declare,begin,exception,end4个关键字来分隔三个块

PL/SQL块可以分为三类:
1. 无名块或匿名块(anonymous):动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。
2. 命名块(named):是带有名称的匿名块,这个名称就是标签。
3. 子程序(subprogram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。
4. 触发器(Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
5. 程序包(package):存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,
则只能在定义该局部子程序的块中调用该局部子程序。

一个pl/sql子程序是一个命名的pl/sql块,可以重复调用的

提示:  一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果.

列名不要与变量名一样 name是列名,name1是变量名
DECLARE
   name1 varchar2(20) :=‘ccc‘;
BEGIN
  DELETE FROM e1 WHERE name=name1;
END;

select * from e1;
select * from e1 where name=‘ccc‘;
DELETE FROM e1 WHERE name=‘ccc‘;


DECLARE
   Row_id ROWID;
   info    VARCHAR2(40);
BEGIN
  INSERT INTO scott.dept VALUES (90, ‘财务室‘, ‘海口‘)
  RETURNING rowid, dname||‘:‘||to_char(deptno)||‘:‘||loc
  INTO row_id, info;
  DBMS_OUTPUT.PUT_LINE(‘ROWID:‘||row_id);
  DBMS_OUTPUT.PUT_LINE(info);
END;

 

================================================

/***********************************************/
/* 文件名: test.sql                  */
/* 说 明:
       一个简单的插入测试,无实际应用。*/
/* 作 者: EricHu                     */
/* 时 间: 2011-5-9                  */
/***********************************************/
DECLARE
  v_ename   VARCHAR2(20) := ‘Bill‘;
  v_sal       NUMBER(7,2) :=1234.56;
  v_deptno   NUMBER(2) := 10;
  v_empno   NUMBER(4) := 8888;
BEGIN
  INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )
  VALUES (v_empno, v_ename, ‘Manager‘, v_sal, v_deptno,
            TO_DATE(‘1954.06.09‘,‘yyyy.mm.dd‘) );
  COMMIT;
END;

select * from emp;

 

=======================================

/***********************************************/
/* 文件名: test_deletedata.sql      */
/* 说 明:
       简单的删除例子,不是实际应用。 */
/* 作 者: EricHu                     */
/* 时 间: 2011-5-9                  */
/***********************************************/
DECLARE
  v_ename   VARCHAR2(20) := ‘Bill‘;
  v_sal       NUMBER(7,2) :=1234.56;
  v_deptno   NUMBER(2) := 10;
  v_empno   NUMBER(4) := 8888;
BEGIN
  INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )
  VALUES (v_empno, v_ename, ‘Manager‘, v_sal, v_deptno,
            TO_DATE(‘1954.06.09‘,‘yyyy.mm.dd‘) );
  COMMIT;
END;
DECLARE
  v_empno   number(4) := 8888;
BEGIN
  DELETE FROM emp WHERE empno=v_empno;
  COMMIT;
END;
select * from emp;

 

pl/sql

标签:har   cot   dna   插入   output   ber   触发器   bms   log   

原文地址:http://www.cnblogs.com/createyuan/p/6869223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!