`
bibiye
  • 浏览: 171142 次
社区版块
存档分类
最新评论

Oracle 10G -- Pl/sql 基础

阅读更多

1.   简介

1.1     结构

DECLARE -- 定义

BEGIN  -- 执行部分

EXCEPTION  -- 例外处理

END;  -- 结束

<!----> <o:p> </o:p>

set serveroutput on;
DECLARE v_ename VARCHAR2(
5 );
BEGIN
SELECT ename INTO v_ename FROM emp WHERE empno=&no;
dbms_output.put_line(
'¹ÍÔ±Ãû:' || v_ename);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line(
'please input correct employees no!' );
END;
/

<o:p> </o:p>

1.2     块分类

<<outer>> <<inner>>

1.3     子程序

1.1.1       过程

执行特定的操作

  CREATE or replace PROCEDURE update_sal(nameVARCHAR2,newsal NUMBER)
IS
BEGIN
     UPDATE emp SET sal=newsal WHERE lower(ename)=lower(name);
END;
/<o:p></o:p>

调用: <o:p> </o:p>

exec update_sal( 'SMITH' , 10 )
call update_sal(
'SMITH' , 800 )<o:p></o:p>

1.1.2       函数

返回特定数据

CREATE or replace FUNCTION annual_income(nameVARCHAR2)
RETURNNUMBERIS
       annual_salary NUMBER(
7 , 2 );
BEGIN
SELECT sal*
12 + nvl(comm, 0 )  into annual_salary FROM emp WHERE lower(ename)=lower(name);
RETURN annual_salary;
END;
/<o:p></o:p>

调用 :

SQL> VAR income NUMBER<o:p></o:p>

SQL> CALL annual_income('scott') INTO : income;<o:p></o:p>

调用完成。 <o:p> </o:p>

SQL> print income<o:p></o:p>

    INCOME<o:p></o:p>

----------<o:p></o:p>

     36000<o:p></o:p>

1.1.3      

逻辑组合相关的过程和函数

-- 包规范
CREATE or replace PACKAGE emp_pkg IS
  PROCEDURE update_sal(nameVARCHAR2, newsal NUMBER);
  FUNCTION annual_income(nameVARCHAR2) RETURNNUMBER;
END;

-- 包体
CREATE or replace PACKAGE BODY emp_pkg IS
       PROCEDURE update_sal(nameVARCHAR2, newsal NUMBER)
       IS
       BEGIN
            UPDATE emp SET sal = newsal WHERE lower(ename) = lower(name);
       END;
      
       FUNCTION annual_income(nameVARCHAR2) RETURNNUMBER
       IS
         annual_salary NUMBER(
7 , 2 );
       BEGIN
            SELECT sal *
12 + nvl(comm, 0 ) into annual_salary FROM emp WHERE lower(ename) = lower(name);
            RETURN annual_salary;
       END;
END;
/

调用:

SQL> call emp_pkg .update_sal('SMITH',1500);

Or

SQL> VAR income NUMBER<o:p></o:p>

SQL> CALL emp_pkg . annual_income('scott') INTO : income;<o:p></o:p>

调用完成。 <o:p> </o:p>

SQL> print income<o:p></o:p>

    INCOME<o:p></o:p>

----------<o:p></o:p>

     36000

1.4     触发器

     是隐含执行的存储过程。

create or replace trigger update_cascade
 afterupdateof deptno on dept
 foreachrow
begin
     update emp set deptno=:new.deptno
     where deptno=:old.deptno;
end;
/    

2.   定义并使用变量

1.5     标量变量

1.1.4       特殊变量说明

LONG(32760 字节 ) VARCHAR2(32767 字节 ) 类似,定义变长的字符串

LONG RAW 用于定义变长的二进制数据 (32760 字节 )

BINARY_INTEGER 定义整数,范围为: -2147483647~2147483647 ( 非表列使用 )

BOOLEAN TRUE/FALSE/NULL ( 非表列使用 )

BINARY_FLOAT/BINARY_DOUBLE ORACLE10 所有

1.1.5       定义使用

Identifier [CONSTANT] datatype [not null] [:= | default expr]

例如: v_valid BOOLEAN NOT NULL DEFAULT FALSE;

C_tax_rate CONSTANT NUMBER(3,2):=0.03;

V_ename emp.ename%TYPE;

1.6     复合变量

1.1.6       Pl/sql 记录

类似于高级语言中的结构

DECLARE
TYPE emp_record_type ISRECORD(
    name emp.ename%TYPE,
    salary emp.sal%TYPE,
  title emp.job%TYPE
);
emp_record emp_record_type;
BEGIN
     SELECT ename,sal,job INTO emp_record FROM emp WHERE empno=
7788 ;
     dbms_output.put_line(
' 雇员名 ' ||emp_record.name);
end;
/     <o:p></o:p>

1.1.7       Pl/sql

类似于高级语言中的数组,下标可以为负 , 个数无限制。

DECLARE
TYPE ename_table_type ISTABLEOF emp.ename%TYPE
     INDEXBYBINARY_INTEGER;
     ename_table ename_table_type;
BEGIN
     SELECT ename  INTO ename_table(-
1 ) FROM emp WHERE empno= 7788 ;
     dbms_output.put_line(
' 雇员名 ' ||ename_table(- 1 ));
end;
/    

<o:p></o:p>

1.1.8       嵌套表

类似于高级语言中的数组,下标不可以为负,个数无限制。

CREATE OR REPLACE TYPE emp_type  ASOBJECT(
       nameVARCHAR2(
10 ),
       salary NUMBER(
6 , 2 ),
       hiredate DATE
);
/
CREATEORREPLACETYPE emp_array ISTABLEOF emp_type;
/

CREATEORREPLACEtable department(
       deptno NUMBER(
2 ),
       dname VARCHAR2(
10 ),
       employee emp_array      
)nestedtable employee storeas employee;<o:p></o:p>

<o:p> </o:p>

1.1.9       VARRAY<o:p></o:p>

VARRAY 类似于嵌套表,它可以作为表列和对象类型属性的数据类型,个数有限制。

CREATE OR REPLACE TYPE article_type  ASOBJECT(
       title VARCHAR2(
30 ),
       pubdate DATE
);
/
CREATEORREPLACETYPE article_array ISVARRAY(
20 ) OF article_type;
/

CREATEORREPLACEtable author(
       idNUMBER(
6 ),
       nameVARCHAR2(
10 ),
       article article_array      
);<o:p></o:p>

1.7     参照变量 <o:p> </o:p>

用于存放数值指针的变量。使得应用程序共享相同对象,从而降低占用空间。

1.1.10 REF CURSOR

游标变量

DECLARE
  TYPE c1 ISREFCURSOR;
  emp_cursor c1;
  v_ename emp.ename%TYPE;
  v_sal   emp.sal%TYPE;
BEGIN
  OPEN emp_cursor FOR
    SELECT ename, sal FROM emp ;
--WHERE deptno = 10;
  LOOP
    FETCH emp_cursor
      INTO v_ename, v_sal;
    EXITWHEN emp_cursor%NOTFOUND;
    dbms_output.put_line(v_ename);
  ENDLOOP;
  CLOSE emp_cursor;
END;
/<o:p></o:p>

1.1.11 REF obj_type<o:p></o:p>

为了共享相同对象,可以用 ref 引用对象类型。

CREATE OR REPLACE TYPE home_type AS OBJECT(

       street VARCHAR2(50),city VARCHAR2(20),

       state VARCHAR2(20),zipcode VARCHAR2(6),

       owner VARCHAR2(10)

);

/

CREATE TABLE homes OF home_type;

INSERT INTO homes VALUES(' 呼伦北路 12 ',' 呼和浩特 ',' 内蒙 ','010010',' 马鸣 ');

INSERT INTO homes VALUES(' 呼伦北路 13 ',' 呼和浩特 ',' 内蒙 ','010010',' 秦斌 ');

CREATE TABLE person(

       id NUMBER(6) PRIMARY KEY,

       name VARCHAR2(10), addr REF home_type

);

INSERT INTO  person SELECT 1,' 马鸣 ',ref(p) FROM homes p WHERE p.owner=' 马鸣 ';

1.8     LOB 变量

内部 : CLOB BLOB NCLOB ;外部: BFILE

1.9     PL/SQL 变量

1.1.12 使用 sql*plus 变量

var namevarchar2( 10 )
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end;
/
print name   <o:p></o:p>

<o:p> </o:p>

1.1.13 使用 procedure Builder 变量

.createcharname length 10
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end;
/
text_to.put_line(:name);  

1.1.14 使用 pro*c/c++ 变量

char name[ 10 ];
execsqlexecute
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end-exec;
printf(
' 雇员名: %s\n' ,name);
分享到:
评论

相关推荐

    oracle10g_pl/sql

    Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...

    Oracle TimesTen In-Memory Database PL/SQL Developer's Guide 11g

    Oracle TimesTen In-Memory Database PL/SQL Developer's Guide 11g Release 2 (11.2.2)-148

    全面对比T-SQL与PL/SQL

    T-SQL 是微软公司开发的 SQL Server 数据库管理系统的脚本语言,而 PL/SQL 是 Oracle 公司开发的 Oracle 数据库管理系统的脚本语言。 数据类型 在 T-SQL 中,numeric(p,s) 用于定义一个带有精度和小数位的数字类型...

    精通Oracle 10g SQL和PL/SQL

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

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...

    oracle9i--pl/sql

    以上只是Oracle 9i与PL/SQL的一些基础概念和关键特性,实际学习过程中还需要深入理解事务管理、性能优化、安全性控制等多个方面。"Oracle9i--pl/sql"这本书应该会详细讲解这些内容,帮助初学者逐步掌握数据库管理和...

    Oracle PL/SQL程序设计(第5版)(上下册)

    《Oracle PL/SQL程序设计(第5版)》是一本全面介绍Oracle 11g中PL/SQL特性的书籍,适合数据库开发人员、管理员及相关从业人员阅读。本书不仅覆盖了PL/SQL的基础知识,还包括了大量的实战经验和高级主题,对于想要深入...

    oracle 10g WDP-PL/SQL 官方培训 PPT

    Oracle 10g WDP-PL/SQL 官方培训PPT是一套全面且深入的教程,旨在帮助学习者掌握Oracle数据库系统中的编程语言PL/SQL。PL/SQL(Procedural Language/Structured Query Language)是Oracle专为数据库管理设计的一种...

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    本书详细讲解了Oracle 11g版本中的PL/SQL语言,这涵盖了从基础语法到高级特性的广泛范围。PL/SQL是Oracle数据库中用于创建存储过程、函数、触发器、包等数据库对象的主要工具。第4版特别关注了在Oracle 11g环境下的...

    how-to-unwrap-pl-sql.zip_oracle pl/sql ppt

    - "How to unwrap PL/SQL-BH-US-06-Finnigan.pdf"可能是对这个主题的详细讲解,涵盖了PL/SQL的解析和调试技巧。 - Oracle官方文档是了解PL/SQL的权威来源。 - 在线教程、论坛和社区(如Stack Overflow)提供了...

    win7 x64 安装oracle10g x64 和 PL/SQL Developer

    ### Win7 x64 安装 Oracle 10g x64 及 PL/SQL Developer 相关知识点 #### 一、Oracle 10g 的安装步骤与注意事项 **1. 下载安装文件** - **来源**: 访问 Oracle 官方网站,下载适用于 Microsoft Windows Vista x...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    pl/sql最新中文手册

    10. **PL/SQL对象类型**:这部分可能涉及Oracle的面向对象特性,如定义对象类型、对象变量、对象表和继承。 11. **PL/SQL与Java、C等其他语言的互操作性**:Oracle提供了与多种编程语言接口的机制,手册会讲解如何...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    总的来说,学习并熟练掌握Oracle Database 12c的PL/SQL开发不仅能够提升数据库管理能力,还能为构建高效、稳定且易于维护的企业级应用打下坚实的基础。而"Oracle Database 12c PL/SQL开发指南(第7版)"的源代码示例...

    Oracle PL/SQL best practice

    2. Oracle 10g及11g的PL/SQL编译器: - 优化编译器:Oracle 10g引入了更智能的编译器,能够自动优化代码,减少运行时错误和提高性能。 - 编译时警告:利用编译器提供的警告来发现潜在问题,提前修复,避免运行时...

    racle 10g绿色客户端 plus PL/SQL Developer-搭建方便的Oracle客户端使用环境

    在本文中,我们将详细介绍如何利用Oracle 10g绿色客户端搭建一个方便的Oracle客户端使用环境,并结合PL/SQL Developer这一强大的数据库开发工具进行更高效的工作。 1. **Oracle 10g绿色客户端**: - **概念**:...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...

Global site tag (gtag.js) - Google Analytics