`
wzglovejava
  • 浏览: 6684 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

10年读pl/sql编程指南敲下了上面大部分例子二(备用)

阅读更多
--(4)在forall子句中使用bulk子句
         declare 
         type ename_table_type is table of emp.ename%type;
         type sal_table_type is table of emp.sal%type;
         ename_table ename_table_type;
         sal_table sal_table_type;
         sql_stat varchar2(100);
         begin
         ename_table:=ename_table_type('SCOTT','ins','SMITH');
         sql_stat:='update emp set sal=sal*1.1 where ename=:1 returning sal into :2';
         forall i in 1..ename_table.count 
         execute immediate sql_stat using ename_table(i) returning bulk collect into sal_table;
         for j in 1..ename_table.count loop
         dbms_output.put_line(ename_table(j)||' '||sal_table(j));
         end loop;
         end;
    --对象类型
         --1,建立使用不包含任何方法的对象类型
         --(1)建立对象类型
         create or replace type person_type1 as object(name varchar2(10),gender varchar2(2),birthdate date);   
         --(2)使用对象类型
         create table person_typ1 of person_type;
         --(3)使用对象类型的构造函数给表添加数据
         insert into person_typ1 values(person_type('张三','M','12-4月-2010'));
         select * from person_typ1;
         --(4)检索行对象数据
         declare
         person person_type;
         begin
         select value(p) into person from person_typ1 p where p.name='&name';
         dbms_output.put_line('性别:'||person.gender);
         end;
           --删除
         begin
         delete from person_typ1 where name='张三';
         end;
         --(5)建立列对象
         create table employee_tab1(
                eno number(6),person person_type,
                sal number(6,2),job varchar2(10)
         );
         --(6)为列对象插入数值
         insert into employee_tab1(eno,sal,job,person) values('1','8000','MGR',person_type('李四','F','4-5月-2010'));
         --(7)检索对象类型列的数据
         declare
         person person_type;
         salary employee_tab1.sal%type;
         begin
         select person,sal into person,salary from employee_tab1 where eno=&no;
         dbms_output.put_line('雇员名:'||person.name||',工资:'||salary);
         end;
         --2.建立和使用包含member方法的对象类型
         --(1)建立对象类型(也叫做对象类型规范)
         create or replace type person_type2 as object(
                name varchar2(10),gender varchar2(2),
                birthday date,address varchar2(100),
                member procedure change_address(new_addr varchar2),
                member function get_info return varchar2 
         );
         --(2)建立对象类型体
         create or replace type body person_type2 is 
         member procedure change_address(new_addr varchar2)
         is begin
         address:=new_addr;
         end;
         member function get_info return varchar2
         is v_info varchar2(100);
         begin
         v_info:='姓名:'||name||',出生日期:'||birthday;
         return v_info;
         end;
         end;
         create table employee_tab2(
                eno number(6),person person_type2,
                sal number(6,2),job varchar2(10)
         );
         insert into employee_tab2 values(1,person_type2('王五','M','9-8月-2010','杭州'),8000,'SALE');
         insert into employee_tab2 values(2,person_type2('孙六','M','9-8月-2010','杭州'),6000,'MGR');
         declare
         persona person_type2;
         begin
         select person into persona from employee_tab2 where eno=&no;
         persona.change_address('呼和浩特');
         update employee_tab2 set person=persona where eno=&no;
         end;
         --(3)实现对象类型体的继承
         --创建父类
         create or replace type person_type3 as object(
              name varchar2(10),gender varchar2(2),
              birthdate date,address varchar2(20),
              member function get_info return varchar2
         ) not final;
         --定义父类方法
         create or replace type body person_type3 as 
         member function get_info return varchar2
         is begin
         return '姓名:'||name||',家庭住址:'||address;
         end;
         end; 
         --创建子类
         create or replace type employee_type3 under person_type3(
                eno number(6),job varchar2(10),
                sal number(6,2),member function get_other return varchar2
         );
         --创建子类方法
         create or replace type body employee_type3 as 
         member function get_other return varchar2
         is begin
         return '雇员名称:'||name||',工资:'||sal;
         end;
         end;   
         --建立并操作对象表
         create table employee_tab3 of employee_type3;
         insert into employee_tab3 values('张三','男','8-5月-1886','南阳',1,'MGR',5600);
         insert into employee_tab3 values('李四','男','8-5月-1886','郑州',2,'MGR',6000);
         declare
         v_employee employee_type3;
         begin
         select value(a) into v_employee from employee_tab3 a where a.eno=&no;
         dbms_output.put_line(v_employee.get_info);
         dbms_output.put_line(v_employee.get_other);
         end;
    --维护对象类型
         --(1)显示对象类型信息
         select * from user_types;  
         desc person_type3;   
         --(2)增加或删除对象类型属性
         alter type person_type add attribute address varchar2(50) cascade;
         alter type person_type drop attribute address cascade;
         --(3)增加或删除对象类型的方法
         alter type person_type add member function get_info return varchar2 cascade;
         create or replace type body person_type as 
         member function get_info return varchar2
         is begin
          return '姓名:'||name||',性别:'||gender;
         end;
         end;
     --dbms_lob包
         --1.常量
         file_readonly CONSTANT BINARY_INTEGER:=0;
         lob_readonly CONSTANT BINARY_INTEGER:=0;
         lob_readwrite CONSTANT BINARY_INTEGER:=1;
         session CONSTANT PLS_INTEGER:=10;
         call CONSTANT PLS_INTEGER:=12;
         --2.APPEND(用于将两个lob类型的变量累加,适用于clob,blob)
         declare 
         dest_lob clob;
         src_lob clob;
         begin
         src_lob:='中国';
         dest_lob:='你好,';
         dbms_lob.append(dest_lob,src_lob);
         dbms_output.put_line(dest_lob);
         end;
         --3.过程close(用于关闭已经打开的lob,适用于clob/nclob,blob,bfile类型)
         dbms_lob.close
         
         
         
         
         
         
     --学海拾贝
         --查询数据库版本
         select * from v$version;
         --查询数据库所有的角色
         select * from dba_roles;
         --查询数据库所有的用户(包括用户密码,表空间)
         select * from dba_users;
         --查询用户的权限
         select * from dba_role_privs where grantee='HHH';
         --查询用户信息(默认表空间,状态等)
         select * from user_users;
         --查询用户下所有的object(包括表,索引,序列等)
         select * from user_objects;
         --创建表空间(一般表空间名和用户名都用大写的创建)
         CREATE TABLESPACE SJYD DATAFILE 'C:\SJYD_DATA.DBF' SIZE 5M DEFAULT STORAGE (INITIAL 50K NEXT 50K MAXEXTENTS UNLIMITED PCTINCREASE 1);
         --创建用户(设置默认的表空间)
         CREATE USER SJYD IDENTIFIED BY SJYD123 DEFAULT TABLESPACE SJYD TEMPORARY TABLESPACE TEMP PROFILE DEFAULT;
         --为用户设置权限
         GRANT "CONNECT" TO "SJYD";
         GRANT "EXP_FULL_DATABASE" TO "SJYD";
         GRANT "IMP_FULL_DATABASE" TO "SJYD";
         ALTER USER "SJYD" DEFAULT ROLE ALL;
         ALTER USER SJYD ACCOUNT UNLOCK;
         --删除表空间和用户
         DROP TABLESPACE SJYD;
         DROP USER SJYD CASCADE;
         --导出数据
         exp sjyd/sjyd123@oracle file='d:\sjyd.dmp' full=y;
         --导入数据
         imp sjyd/sjyd123@oracle file='d:\sjyd.dmp' fromuser=sjyd touser=hhh;
         imp sjyd/sjyd123@oracle file='d:\sjyd.dmp' full=y;
         --数据库进行闪回
         exec dbms_flashback.enable_at_time(to_timestamp('2005-1-24 23:26:5', 'yyyy-mm-dd hh24:mi:ss'));
         --单表进行闪回
         alter table tablename enable row movement;
         flashback table tablename to timestamp('2010-08-17 15:00:00');
         alter table tablename disable row movement;
         --查询表的创建时间
         select * from user_objects WHERE object_name='TABLE_NAME';
         select * from all_objects where object_name='ITABLE_NAME';
         --查询用户的默认表空间
         select username,default_tablespace from user_users where username='SCOTT';
         
         --对表的操作
         select * from dba_recyclebin a where a.original_name='tablename';--查询该表被操作的时间(删除操作)
         select * from recyclebin;--查看回收站,里面有被删除表的信息和删除时间。
         flashback table tablename to before drop;--将删除的表进行闪回。
         select * from t as of timestamp to_timestamp('2010-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');--查询该时间点的数据
                --建表同时建主外键
         create table t_sun(sno varchar2(5),id number,sname varchar2(10),
         constraint pk_sno primary key(sno),
         constraint fk_id foreign key(id) references t(id));
         --设置数据库的审计功能(audit,对表的修改进行跟踪记录)
         show parameter audit;--查看审计功能是否开启
         alter system set audit_sys_operations=true scope=spfile;--审计管理用户(以sysdba/sysoper角色)
         alter system set audit_trail=db,extended scope=spfile;--开启审计功能,并且将更改反映到实例文件
         startup force;--重启实例。
         show parameter audit;--查看是否开启
         audit all to emp;--设置对某个表对象进行审计。
         select * from dba_audit_trail;--查询审计记录。
         alter system set audit_trail=none;--关闭审计。
         
         --oracle全表扫描的四种类型 http://blog.csdn.net/tianlesoftware/archive/2010/08/31/5852106.aspx
         
         --判断是否是pl/sql进行的用户连接,建立触发器
         create or replace trigger check_client
         after logon on database
         begin
         for c in (select null from v$session where sid=userenv('sid') and program='plsqldev.exe') loop
         raise_application_error(-20001,'Deny PLSQL Developer connection.');
         end loop;
         end;


         --进行数据库备份与恢复(rman)
        
         
         --建立记录类型(用于单行多列)
         declare type emp_record_type is record(
                 name emp.ename%type;
                 sal emp.sal%type
         ); 
     --使用索引表类型(数组,用于多行单列,下标可以从负值开始,无长度限制)
         declare type ename_table_type is table of emp.ename%type index by binary_integer;
         ename_table ename_table_type;
         begin
         select ename into ename_table(1) from emp where empno=&no;
         dbms_output.put_line('雇员名:'||ename_table(1));
         end;--使用binary_integer类型
         
         declare type area_table_type is table of number index by varchar2(10);
         area_table area_table_type;
         begin
         area_table('北京'):=1;
         area_table('上海'):=2;
         area_table('广州'):=3;
         dbms_output.put_line('第一个元素:'||area_table.first);
         dbms_output.put_line('最后一个元素:'||area_table.last);
         end;--使用varchar2类型
     --嵌套表(下标从1开始,元素个数无限制,使用时必须先使用构造方法初始化嵌套表变量)
         declare type ename_table_type is table of emp.ename%type;
         ename_table ename_table_type;
         begin
         ename_table:=ename_table_type('mary','mary');
         select ename into ename_table(2) from emp where empno=&no;
         dbms_output.put_line('雇员名:'||ename_table(2));
         end;     
         --变长数组varray(下标从1开始,有限长度,必须要初始化)
         declare type ename_table_type is varray(20) of emp.ename%type;
         ename_table ename_table_type:=ename_table_type('mark');
         begin
         select ename into ename_table(1) from emp where empno=&no;
         dbms_output.put_line('雇员名:'||ename_table(1));
         end;
         --记录表(处理多行多列的数据)
         declare type emp_table_type is table of emp%rowtype index by binary_integer;
         emp_table emp_table_type;
         begin
         select * into emp_table(1) from emp where empno=&no;
         dbms_output.put_line('雇员名'||emp_table(1).ename);
         dbms_output.put_line('工资'||emp_table(1).sal);
         end;
         --使用多级嵌套表
         declare type al_table_type is table of int;
         type nal_table_type is table of al_table_type;
         nal_table nal_table_type:=nal_table_type(al_table_type(2,34),al_table_type(2,3));
         begin
         dbms_output.put_line('显示二维数组所有元素');
         for i in 1..nal_table.count loop
             for j in 1..nal_table(i).count loop
                 dbms_output.put_line('nal_table('||i||','||j||')='||nal_table(i)(j));
             end loop;
         end loop;
         end;
    
分享到:
评论

相关推荐

    PL/SQL编程基础知识

    ### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...

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

    PL/SQL是Oracle专为数据库管理设计的一种过程化编程语言,它结合了SQL查询语言的威力与高级编程语言的灵活性,使得数据库开发者能够创建复杂的应用程序逻辑。 在"Oracle Database 12c PL/SQL开发指南(第7版)"这...

    oracle10g_pl/sql

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

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

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

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

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

    pl/sql最新中文手册

    这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册可能涵盖的一些核心知识点: 1. **PL/SQL基础**:手册可能会从基础开始,介绍PL/SQL的基本...

    PL/SQL编程(电子版)

    【PL/SQL编程】是Oracle数据库中用于数据库管理和应用程序开发的一种高级过程语言,它结合了SQL查询语言的威力和高级编程语言的灵活性。本章详细介绍了PL/SQL的基础知识,帮助初学者快速掌握该语言。 **4.1 PL/SQL...

    PL/SQL基础编程,实例自写

    ### PL/SQL基础编程知识点详解 #### 一、PL/SQL概述 PL/SQL,全称为Procedural Language for SQL,是Oracle数据库特有的高级程序设计语言。它结合了SQL的数据处理能力和传统编程语言的控制结构,使开发者能够在...

    第16章Pl/sql编程基础

    pl/sql编程基础教程,内容丰富,适合初学者学习。

    一个对数据库的操作工具PL/SQLpl/sqL工具

    1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...

    精通Oracle 10g PL/SQL编程

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

    PL/SQL编程教程

    PL/SQL编程教程电子书,全册,完整版。。。。

    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必备

    "Oracle资料学习PL/SQL必备"这个主题涵盖了对Oracle数据库系统以及PL/SQL编程语言的学习资源,特别是针对那些希望深入理解并掌握PL/SQL的初学者或专业人士。PL/SQL的基础部分是了解和使用Oracle数据库的关键,它包括...

    精通oracle10g PL/SQL编程

    本书《精通Oracle10g PL/SQL编程》是为Oracle应用开发人员量身定做的编程指南。通过本书的学习,读者不仅可以掌握PL/SQL的基础编程知识,例如基本的SQL语句和子程序的编写,而且还可以深入学习PL/SQL的所有高级开发...

    oracle pl/sql 实例精解(中文原书第4版)

    本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...

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

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

    oracle 经典资料及PL/SQL 使用指南 英文版

    二、PL/SQL编程 1. PL/SQL块结构:PL/SQL由声明部分、执行部分和异常处理部分组成。理解块的结构对于编写有效程序至关重要。 2. 变量与常量:PL/SQL支持声明变量和常量,用于存储数据。学习如何声明、初始化和改变...

    Oracle PL/SQL编程及最佳实践

    Oracle PL/SQL 编程及最佳实践 Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密...

    精通oracle 10g pl/sql编程

    《精通Oracle 10g PL/SQL编程》是一本专门针对Oracle 10g版本的PL/SQL编程语言的权威指南书籍。Oracle 10g是甲骨文公司(Oracle Corporation)推出的数据库管理系统(DBMS)的一个重要版本,而PL/SQL是Oracle的存储...

Global site tag (gtag.js) - Google Analytics