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;

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

create table StudentInformation(
id number(20) not null primary key,
name varchar2(10) not null,
sex varchar2(2),
address varchar2(20),
hobby varchar(20));
declare
 maxrecords constant int:=180000;
 i int :=1009;
begin
 for i in 120000..maxrecords loop
 insert into STUDENTINFORMATION("ID","NAME",SEX,ADDRESS,HOBBY)
 values(i,TO_CHAR('99'+i),'男','山东临沂','打篮球');
 end loop;
 dbms_output.put_line(' 成功录入数据! ');
 commit;
end;

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

存储过程

http://www.cnblogs.com/chinafine/articles/1776085.html

1。预编译,已优化,效率较高。避免了SQL语句在网络中传输然后再解释的低效率。
2。如果公司有专门的DBA,写存储过程可以他来做,程序员只要按他提供的接口调用就好了。这样分开来做,比较清楚。
3。修改方便。嵌入在程序中的SQL语句修改比较麻烦,而且经常不能肯定该改的是不是都改了。SQLSERVER上的存储过程修改就比较方便,直接改掉该存储过程,调用它的程序基本不用动,除非改动比较大(如改了传入的参数,返回的数据等)。
4。会安全一点。不会有SQL语句注入问题。

当然,也有缺点。特别是业务逻辑比较复杂时,全用存储过程来写,估计也累的够呛。
1。SQL存储过程执行起来比SQL命令文本快得多。当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。
2。调用存储过程,可以认为是一个三层结构。这使你的程序易于维护。如果程序需要做某些改动,你只要改动存储过程即可
3。你可以在存储过程中利用Transact-SQL的强大功能。一个SQL存储过程可以包含多个SQL语句。你可以使用变量和条件。这意味着你可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。

存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
  * 可保证数据的安全性和完整性。
  # 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
  # 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
  * 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
  * 可以降低网络的通信量。
  * 使体现企业规则的运算程序放入数据库服务器中,以便:
  # 集中控制。
   # 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则 当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的运算放入存储过程中,则当企业规则发生变化 时,只要修改存储过程就可以了,应用程序无须任何变化。

命令行下查看存储过程与函数内容

user_source或all_source

SQL> select * from user_source where type='PROCEDURE';

SQL> select * from user_source where type='FUNCTION';

ALL_SOURCE中有以下5种类型
1 FUNCTION
2 JAVA SOURCE
3 PACKAGE
4 PACKAGE BODY
5 PROCEDURE

Oracle supplies many PL/SQL packages with the Oracle server
to extend database functionality and provide PL/SQL access to SQL features.
You can use the supplied packages when creating your applications or for ideas in creating your own stored procedures.

This manual covers the packages provided with the Oracle database server.

Packages supplied with other products, such as Oracle Developer or the Oracle Application Server, are not covered.
Note that not every package or type described in this manual or elsewhere in the
Oracle Database Documentation Library is installed by default. In such cases, the
documentation states this and explains how to install the object. Run this query as a
suitably privileged user:

A package is an encapsulated collection of related program objects stored together in
the database. Program objects are procedures, functions, variables, constants, cursors,
and exceptions.

http://www.itpub.net/thread-1830016-1-1.html  dimensions这个模式对象类型

dbms_compression包的使用方法

#################################

select decode(
  dbms_compression.get_compression_type(
    ownname => 'KYC_ACC',
    tabname => 'ACCT_ACCOUNT',
    row_id => 'AAAYFlAAKAAAAKWAAR'),
  1, 'no compression',
  2, '33',
  3, '44',
  4, '55',
  '66'
) compression_type from dual;

#################################

set serveroutput on;
declare
  v_rlt number(8) :=-3;
begin
  <<fst_loop>>
  loop
    dbms_output.put_line('v_rlt ='||v_rlt);
    v_rlt:=v_rlt+1;
    exit fst_loop when v_rlt>3;
  end loop;
    dbms_output.put_line('loop循环结束');
end;
/

####################################

declare
   v_rlt number(8):=-3;
begin
    <<fst_loop>>
    loop
      dbms_output.put_line('v_rlt = '||v_rlt);
      v_rlt:=v_rlt+1;
      if v_rlt > 3 then
       dbms_output.put_line('变量的值已经大于3,当前值为'||v_rlt);
       exit fst_loop;
      end if;
    end loop fst_loop;
      dbms_output.put_line('LOOP循环已经结束!');
end;
/

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

在worksheet中直接运行,并可以输出结果

set serveroutput on
declare
  cursor c1 is
    select last_name from employees
    where rownum<11
    order by last_name;
  name employees.last_name%type;
begin
  open c1;
  loop
    fetch c1 into name;
    exit when c1%notfound or c1%notfound is null;
    dbms_output.put_line(c1%rowcount || '. ' ||name);
    if c1%rowcount=5 then
      dbms_output.put_line('---Fetched 5th row ---');
    end if;
  end loop;
  close c1;
end;
/

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

set serveroutput on
declare
  cursor c1 is
    select last_name,salary from employees
    where rownum<11
    order by last_name;
  my_ename employees.last_name%type;
  my_salary employees.salary%type;
begin
  open c1;
  loop
    fetch c1 into my_ename,my_salary;
    if c1%notfound then
      exit;
    else
      dbms_output.put_line('Name= '||my_ename||' , salary= '||my_salary);
    end if;
  end loop;
end;
/

转载于:https://www.cnblogs.com/createyuan/p/6869223.html

oracle-pl/sql之一相关推荐

  1. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  2. Oracle如何代码编辑,配置UltraEdit为Oracle PL/SQL代码编辑器

    配置UltraEdit为Oracle PL/SQL代码编辑器[@more@] 将下文复制到UltraEdit的wordfile.txt的最后,就能实现UltraEdit中对PL/SQL文件语法突出显示 ...

  3. oracle pl sql示例,oracle PL SQL学习案例(一)

    oracle PL SQL学习案例(一) [示例1.1]  查询雇员编号为7788的雇员姓名和工资. 步骤1:用SCOTT/TIGER账户登录SQL*Plus. 步骤2:在输入区输入以下程序: /*这 ...

  4. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  5. Oracle PL SQL 精萃pdf

    <Oracle PL SQL 精萃pdf> 下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731009.html

  6. oracle sql判断相等,Oracle PL/SQL判断两个字段相等或不等问题

    Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE. 例如以下代码: ... a1  VARCHA ...

  7. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

    Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 ACID原则:即一个事务具有原子性.一致性. ...

  8. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  9. oracle存储过程多分支怎样写,如何从存储过程返回多行? (Oracle PL / SQL)

    如何从存储过程返回多行? (Oracle PL / SQL) 我想用一个参数创建一个存储过程,该存储过程将根据参数返回不同的记录集. 这是怎么做的? 我可以从普通SQL中调用它吗? 5个解决方案 65 ...

  10. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

最新文章

  1. [Egret]长按截屏分享、分享截屏图片、本地存储
  2. 关于js复制文本信息(按钮级别)
  3. 动态添加input_前端提效必备:动态模版生成
  4. 移动前端适配方法总结
  5. Git笔记(11) 分支简介
  6. Java关键字synchronized的简单理解
  7. 转:【微信小程序】实现锚点定位楼层跳跃的实例
  8. 设置对话框大小和位置
  9. 树莓派安装rtl8192eu无线网卡驱动
  10. C语言 打印数组为什么要用循环
  11. 链家网东莞二手房数据分析
  12. python爬虫获取维基百科词条
  13. 计算机专业技能考核方案,巩义市计算机专业技能课教学考核方案.doc
  14. 软件测试是做什么的?好学的吗?
  15. 数据如何变成知识(2):数据湖和数据沼泽
  16. 【ATcode】怪文書 / Dubious Document(题意)
  17. cad考试题库绘图题答案_CAD考试试题库及参考答案
  18. ibm服务器安装ghostxp系统,windows xpsp3 ghost安装最实用的方法
  19. linux环境安装mysql8.0以及使用Navicat连接Linux中的mysql
  20. 黑苹果bigsur升级monterey过程循环重启

热门文章

  1. 【Vue】class style:Vue中的两种样式处理方法
  2. ECharts 常用图表一看即会「散点图」「饼图」「地图」「雷达图」「仪表盘」
  3. php gzip乱码,php file_get_contents抓取Gzip网页乱码的三种解决方法
  4. 数据结构与算法(二):比较有名的排序和所有算法
  5. JavaWeb学习总结(1-53)
  6. 使用FlashFXP V3.8烈火汉化绿色版软件连接Linux
  7. [JavaWeb基础] 015.Struts2 表单验证框架
  8. JSONArray传值的使用小结
  9. Log4j2进阶使用(Pattern Layout详细设置)
  10. java.nio.DirectByteBuffer管理堆外内存