动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.查查oracle函数宝典,看看函数大.
.Fravo Oracle 1Z0-131 v1.0.
.怎样将冷备份移植到另一台Solari.
.利用Oracle管理服务器将数据导入.
.表中某列被修改后触发器SQL例子.
.关于使用PRO*C编程的一些简单说明.
.Oracle性能调优过程中如何观察缓.
.DataGuard.
.Oracle与PHP实例开发Myers订单跟.
.在redhat Linux9下安装Oracle9.2.
.Oracle CRM 的组成及各模块的功能.
.Oracle 10g + SQL SERVER 2000 透.
.Oracle弱智900问八.
.使用表面区域配置工具保护服务.
.Oracle Forms Server Troublesho.
.ORACLE9IAS在redhat linux as 2..
.[基础]9i新特性之二安全篇.
.Fravo Oracle 1Z0-031 v1.0.
.dual表是什么表?.
.ORA-01555 快照过旧--详细解释.

PL/SQL入门

发表日期:2008-2-9 |



  1.1 PL/SQL简介
  
   PL/SQL是Oracle的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。
  
  默认安装完Oracle后,初学者应该了解下面的一些SQL语句:
  
  1、连接
  SQL*Plus system/manager
  
  2、显示当前连接用户
  SQL> show user
  
  3、查看系统拥有哪些用户
  SQL> select * from all_users;
  
  4、新建用户并授权
  SQL> create user a identified by a;(默认建在SYSTEM表空间下)
  SQL> grant connect,resource to a;
  
  5、连接到新用户
  SQL> conn a/a
  
  6、查询当前用户下所有对象
  SQL> select * from tab;
  
  7、建立第一个表
  SQL> create table a(a number);
  
  8、查询表结构
  SQL> desc a
  
  9、插入新记录
  SQL> insert into a values(1);
  
  10、查询记录
  SQL> select * from a;
  
  11、更改记录
  SQL> update a set a=2;
  
  12、删除记录
  SQL> delete from a;
  
  13、回滚
  SQL> roll;
  SQL> rollback;
  
  14、提交
  SQL> commit;
  
  
  
  1.2 创建PL/SQL程序块
  
  DECLARE
  …
  BEGIN
  …
  EXCEPTION
  END;
  
  1.3 PL/SQL数据类型
  
  名称 类型 说明
  
  NUMBER 数字型 能存放整数值和实数值,并且可以定义精度和取值范围
  BINARY_INTEGER 数字型 可存储带符号整数,为整数计算优化性能
  DEC 数字型 NUMBER的子类型,小数
  DOUBLE PRECISION 数字型 NUMBER的子类型,高精度实数
  INTEGER 数字型 NUMBER的子类型,整数
  INT 数字型 NUMBER的子类型,整数
  NUMERIC 数字型 NUMBER的子类型,与NUMBER等价
  REAL 数字型 NUMBER的子类型,与NUMBER等价
  SMALLINT 数字型 NUMBER的子类型,取值范围比INTEGER小
  VARCHAR2 字符型 存放可变长字符串,有最大长度
  CHAR 字符型 定长字符串
  LONG 字符型 变长字符串,最大长度可达32,767
  DATE 日期型 以数据库相同的格式存放日期值
  BOOLEAN 布尔型 TRUE OR FALSE
  ROWID ROWID 存放数据库的行号
  
  例子:
  DECLARE
   ORDER_NO NUMBER(3);
   CUST_NAME VARCHAR2(20);
   ORDER_DATE DATE;
   EMP_NO INTEGER:=25;
   PI CONSTANT NUMBER:=3.1416;
  BEGIN
   NULL;
  END;
  
  1.4 处理PL/SQL的异常
  
  1.4.1 PL/SQL的异常
  
  例如:
  DECLARE
   X NUMBER;
  BEGIN
   X:= 'yyyy';--Error Here
  EXCEPTION WHEN VALUE_ERROR THEN
   DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED');
  END;
  
  实现技术:
  EXCEPTION WHEN first_exception THEN
  …
  WHEN second_exception THEN
  …
  WHEN OTHERS THEN
  /*THERS异常处理器必须排在最后,它处理所有没有明确列出的异常。*/
  …
  END;
  
  1.4.2 预定义异常
  
  异常名称 ORACLE错误 说明
  
  CURSOR_ALREADY_OPEN ORA-6511 试图打开一个已打开的光标
  DUP_VAL_ON_INDEX ORA-0001 试图破坏一个唯一性限制
  INVALID_CURSOR ORA-1001 试图使用一个无效的光标
  INVALID_NUMBER ORA-1722 试图对非数字值进行数字操作
  LOGIN_DENIED ORA-1017 无效的用户名或者口令
  NO_DATA_FOUND ORA-1403 查询未找到数据
  NOT_LOGGED_ON ORA-1012 还未连接就试图数据库操作
  PROGRAM_ERROR ORA-6501 内部错误
  ROWTYPE_MISMATCH ORA-6504 主变量和光标的类型不兼容
  STORAGE_ERROR ORA-6500 内部错误
  TIMEOUT_ON_RESOURCE ORA-0051 发生超时
  TOO_MANY_ROWS ORA-1422 SELECT INTD命令返回的多行
  TRANSACTION_BACKED_OUT ORA-006 由于死锁提交被退回
  VALUE_ERROR ORA-6502 转换或者裁剪错误
  ZERO_DIVIDE ORA-1476 试图被零除
   
  
  1.4.3 自定义异常处理
  
  DECLARE
   BAD_ROWID EXCEPTION;
   X ROWID;
  PRAGMA EXCEPTION_INIT(BAD_ROWID,-01445);
  BEGIN
   SELECT ROWID INTO X FROM TAB
   WHERE ROWNUM=1;
  EXCEPTION WHEN BAD_ROWID THEN
   DBMS_OUTPUT.PUT_LINE('CANNOT QUERY ROWID FROM THIS VIEW');
  END;
  
   注重:-01445 因为PRAGMA EXCEPTION_INIT命令把这个变量(-01455)连接到
  这个ORACLE错误,该语句的语法如下:
   PRAGMA EXCEPTION_INIT(exception_name, error_number);
  其中error_number是负数,因为错误号被认为负数,当定义错误时记住使用负号
  
  1.4.4 自定义异常
  
   异常不一定必须是oracle返回的系统错误,用户可以在自己的应用程序中创
  建可触发及可处理的自定义异常
  DECLARE
   SALARY_CODE VARCHAR2(1);
   INVALID_SALARY_CODE EXCEPTION;
  BEGIN
   SALARY_CODE:='X';
   IF SALARY_CODE NOT IN('A', 'B', 'C') THEN
   RAISE INVALID_SALARY_CODE;
   END IF;
  EXCEPTION WHEN INVALID_SALARY_CODE THEN
   DBMS_OUTPUT.PUT_LINE('INVALID SALARY CODE');
  END;
  
  1.5 在PL/SQL中单条记录的查询
  
   在PL/SQL内,有时在没有定义显式光标的情况下需要查询单条记录,并把记录的数据赋给变量。

  DECLARE
   ln_dno NUMBER;
   lvs_dname VARCHAR2(40);
  BEGIN
   SELECT DEPT_NO,DEPT_NAME
   INTO ln_dno,lvs_dname
   FROM dept
   WHERE DEPT_NO=1;
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(ln_dno)'.'lvs_dname);
  EXCEPTION WHEN NO_DATA_FOUND THEN
   DBMS_OUTPUT.PUT_LINE('NO DATA_FOUND');
   WHEN TOO_MANY_ROWS THEN
   DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
  END;
  
  1.6 用光标查询多条记录
  
   光标(CURSOR)是指向一个称为上下文相关区的区域的指针,这个区域在服务器的处理过程全局区(PGA)内,当服务器上执行了一个查询后,查询返回的记录集存放在上下文相关区,通过光标上的操作可以把这些记录检索到客户端的应用程序。
  
  1.6.1 使用光标的基本方法
  
  DECLARE
   CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS
   WHERE ROWNUM<=10
   ORDER BY VIEW_NAME;
   VNAME VARCHAR2(40);
  BEGIN
   OPEN C1;
   FETCH C1 INTO VNAME;
   WHILE C1%FOUND LOOP
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)' 'VNAME);
   FETCH C1 INTO VNAME;
   END LOOP;
  END;
  
  属性
  含量
  
  %FOUND
  布尔型属性,当最近一次该记录时成功返回,则值为TRUE
  
  %NOTFOUND
  布尔型属性,它的值总与%FOUND属性的值相反
  
  %ISOPEN
  布尔型属性,当光标是打开时返回TRUE
  
  %ROWCOUNT
  数字型属性,返回已从光标中读取的记录数
  
  
   
  
  1.6.2 使用光标FOR循环
  
  DECLARE
   CURSOR C1 IS
   SELECT VIEW_NAME
   FROM ALL_VIEWS
   WHERE ROWNUM<=10
   ORDER BY VIEW_NAME;
  BEGIN
   FOR I IN C1 LOOP
   DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
   END LOOP;
  END LOOP;
  EXCEPTION WHEN OTHERS THEN
   NULL;
  END;
  
  1.6.3 带参数的光标
  
  DECLARE
   CURSOR C1(VIEW_PATTERN VARCHAR2) IS
   SELECT VIEW_NAME
   FROM ALL_VIEWS
   WHERE VIEW_NAME LIKE VIEW_PATTERN'%' AND
   ROWNUM<=10
   ORDER BY VIEW_NAME;
   VNAME VARCHAR2(40);
  BEGIN
   FOR I IN C1('USER_AR') LOOP
   DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
   END LOOP;
   DBMS_OUTPUT.PUT_LINE();
   FOR I IN C1('USER') LOOP
   DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
   END LOOP;
  EXCEPTION WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE('AAA');
  END;
  
  1.7 创建代表数据库记录和列的变量
  
  变量名 基表名.列名%TYPE
  DECLARE
   D_NO DEPT.DEPT_NO%TYPE;
   D_NAME DEPT.DEPT_NAME%TYPE;
  BEGIN
   SELECT DEPT_NO,DEPT_NAME INTO D_NO,D_NAME
上一篇:Oracle Web应用开发之Apache架设与PL/SQL页面设计 人气:613
下一篇:使用PL/SQL关联数组访问元素 人气:780
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成