`
121059457
  • 浏览: 23247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

plsql小记

阅读更多

1.
natural join
2.
using
3.
left[outer]join 左连接用于返回满足连接条件的数据,以及不满足连接的左边表的其他数据。
4.
right[outer]join 右连接用于返回满足连接条件的数据,以及不满足连接的右边表的其他数据。
5.
full[outer]join 完全连接用于返回连接条件的数据,以及不满足连接条件的左边表和右边表。

6.
create or replace trigger tr_sec_emp
 before insert or update or delete on emp
begin
     if to_char(sysdate,'DY','nls_date_language=AMERICAN')
        in ('SAT','SUN') then
        raise_application_error(-20001,'不能在休息日改变雇员信息');
     end if;
end tr_sec_emp;

7.
create or replace trigger tr_sec_emp
 before insert or update or delete on emp
begin
     if to_char(sysdate,'DY','nls_date_language=AMERICAN')
        in ('SAT','SUN') then
        case
            when inserting then
                 raise_application_error(-20001,'不能在休息日执行INSERT');
            when updating then
                 raise_application_error(-20001,'不能在休息日执行update');
            when deleting then
                 raise_application_error(-20001,'不能在休息日执行detele');
         end case;
     end if;
end tr_sec_emp;

8.plsql记录
为了处理单行单列的数据,可以使用标量变量;为了处理单行多列的数据,可以使用plsql记录;
为了处理单列多行数据,应该使用pl/sql集合。plsql集合包括plsql表,嵌套表和varray三种类型。
--自定义plsql记录

declare
       type emp_record_type is record(
       name emp.ename%type,
       salary emp.sal%type,
       dno emp.deptno%type
     );
     
 emp_record emp_record_type;
 ...
 
--使用%rowtype属性定义记录变量 
dept_record dept%rowtype;
emp_record emp%rowtype;


--select into 语句中使用pl/sql记录
declare
type emp_record_type is record(
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=&no;
dbms_output.put_line(emp_record.name);
dbms_output.put_line(emp_record.salary);
dbms_output.put_line(emp_record.title);
end;

--在insert values子句中使用记录变量
declare
dept_record dept%rowtype;
begin
dept_record.deptno :=50;
dept_record.dname :='administrator';
dept_record.loc :='beijing';
insert into dept values dept_record;
end;


--在insert values子句中使用记录成员
declare
       dept_record dept%rowtype;
begin
 dept_record.deptno :=60;
 dept_record.dname :='sales';
 insert into dept(deptno,dname) values
 (dept_record.deptno,dept_record.dname);
 end;

 --在update set子句中使用记录变量

declare
  dept_record dept%rowtype;
begin
  dept_record.deptno := 30;
  dept_record.dname  := 'sales';
  dept_record.loc    := 'shanghai';
  update dept set row = dept_record where deptno = 30;
end;

--在update set子句中使用记录成员

declare 
dept_record dept%rowtype;
begin
dept_record.loc :='guangzhou';
update dept set loc = dept_record.loc where deptno =10;
commit;
end;

9.plsql集合


--使用binary_integer或者pls_integer定义plsql表下标
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;
/


--使用varchar2定义plsql表下标
declare
type area_table_type is table of number index by varchar2(10);
area_table area_table_type;
begin
area_table('Japan') :=1;
area_table('china') :=2;
area_table('america') :=3;
area_table('England') :=4;
area_table('portugal') :=4;
dbms_output.put_line('第一个元素:'||area_table.first);
dbms_output.put_line('最后一个元素:'||area_table.last);
end;


--在plsql块中使用嵌套表
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type;
begin
ename_table := ename_table_type('mary','mary','mary');
dbms_output.put_line('雇员名:'||ename_table(2));
select ename into ename_table(2) from emp where empno =&no;
dbms_output.put_line('雇员名:'||ename_table(2));
end;
/





--在表列中使用嵌套表
create or replace type phone_type is table of varchar2(20);
/

create table person(
id number(4),name varchar2(10),sal number(6,2),phone phone_type)nested table phone store as phone_table;


--操纵嵌套表列 为嵌套表列插入数据。
begin
insert into person values(1,'scott',800,phone_type('0471-3456788','13804111111'));
commit;
end;


--操纵嵌套表,检索嵌套表列的数据
declare
phone_table phone_type;
begin
select phone into phone_table from person where name ='scott';
for i in 1..phone_table.count loop
dbms_output.put_line('号码:'||i||':'||phone_table(i));
end loop;
end;
/

--更新嵌套表列数据
declare
phone_table phone_type := phone_type('0471-3456788','1255555','985456','4414654');
begin
update person set phone = phone_table where id =1;
commit;
end;

--在plsql块中使用varray
declare
type job_array_type is varray(20) of emp.job%type;
job_array job_array_type :=job_array_type('clerk','clerk');
begin
select job into job_array(1) from emp where lower(ename) = lower('&ename');
dbms_output.put_line('岗位:'||job_array(1));
end;
/

--在表列中使用varray
create type phone_array is varray(20) of varchar2(20);
/
create table worker(
id number(4),name varchar2(10),sal number(6,2),phone phone_array);


--plsql记录表
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);
  dbms_output.put_line('岗位:'||emp_table(1).job);
   dbms_output.put_line('上岗日期:'||emp_table(1).hiredate);
 end;


--exists

declare
 type id_table_type is table of number(6);
 id_table id_table_type := id_table_type(1,2,3);
 no int;
 begin
 no:=&i;
 if id_table.exists(no) then
 dbms_output.put_line('元素值:'||id_table(no));
 else
 dbms_output.put_line('元素未初始化');
 end if;
 end;


 --count
declare
  type id_array_type is varray(20) of number(6);
  id_array id_array_type := id_array_type(1, null, 2, 5);
begin
  dbms_output.put_line('id_array元素的总数:' || id_array.count);
end;


--limit
declare
  type id_array_type is varray(20) of number(6);
  id_array id_array_type := id_array_type(1, null, 2, 5);
begin
  dbms_output.put_line('id_array元素的总数:' || id_array.count);
  dbms_output.put_line('id_array元素的最大个数:' || id_array.limit);
end;




10.
批量帮定(bulk bind) 用于在执行sql操作时传递所有pl/sql集合元素的数据,通过在select和dml语句上使用批量绑定,可以极大地加快批量数据的出来那个


--使用传统循环插入
declare
  type id_table_type is table of number(6) index by binary_integer;
  type name_table_type is table of varchar2(10) index by binary_integer;
  id_table   id_table_type;
  name_table name_table_type;
  start_time number(10);
  end_time   number(10);
begin
  for i in 1 .. 100000 loop
    id_table(i) := i;
    name_table(i) := 'name' || to_char(i);
  end loop;
  start_time := dbms_utility.get_time;
  for i in 1 .. 100000 loop
    insert into demo values (id_table(i), name_table(i));
  end loop;
  end_time := dbms_utility.get_time;
  dbms_output.put_line('总计时间(秒):' ||
                       to_char((end_time - start_time) / 100));
end;

--使用批量绑定
declare
  type id_table_type is table of number(6) index by binary_integer;
  type name_table_type is table of varchar2(10) index by binary_integer;
  id_table   id_table_type;
  name_table name_table_type;
  start_time number(10);
  end_time   number(10);
begin
  for i in 1 .. 100000 loop
    id_table(i) := i;
    name_table(i) := 'name' || to_char(i);
  end loop;
  start_time := dbms_utility.get_time;
  forall i in 1 .. id_table.count
    insert into demo values (id_table(i), name_table(i));
  end_time := dbms_utility.get_time;
  dbms_output.put_line('总计时间(秒)' ||
                       to_char((end_time - start_time) / 100));
end;


bulk collect 子句用于将批量数据存放到plsql集合,该子句只适用于select into 语句,fetch into 语句和dml语句.


--在select into 语句中使用bulk collect 子句
declare
  type emp_table_type is table of emp%rowtype index by binary_integer;
  emp_table emp_table_type;
begin
  select * bulk collect into emp_table from emp where deptno = &no;
  for i in 1 .. emp_table.count loop
    dbms_output.put_line('姓名:' || emp_table(i)
                         .ename || ',岗位:' || emp_table(i)
                         .job || ',工资' || emp_table(i).sal);
  end loop;
end;


--dml返回子句中使用bulk collect 子句
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;
begin
  update emp set sal = sal * 1.1 where deptno = &no returning ename, sal bulk collect into ename_table,sal_table;

  for i in 1..ename_table.count loop 
  dbms_output.put_line('姓名:' ||ename_table(i)||',新工资:'||sal_table(i));
end loop;
end;

--使用forall语句 插入批量数据
declare
  type id_table_type is table of demo.id%type index by binary_integer;
  type name_table_type is table of demo.name%type index by binary_integer;
  id_table   id_table_type;
  name_table name_table_type;
  start_time number(10);
  end_time   number(10);
begin
  for i in 1 .. 20000000 loop
    id_table(i) := i;
    name_table(i) := 'Name' || to_char(i);
  end loop;
  start_time := dbms_utility.get_time;

  forall i in 1 .. id_table.count
    insert into demo values (id_table(i), name_table(i));
  end_time := dbms_utility.get_time;
  dbms_output.put_line('总计时间(秒):' ||
                       to_char((end_time - start_time) / 100));
end;

11.
delete:不会释放表所占用的空间
truncate:会释放表所占用的空间
truncate table emp



















分享到:
评论

相关推荐

    plsql11汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序。在中文环境下,对于不熟悉英文界面的用户来说,使用英文版可能会带来不便。"plsql11汉化包"正是为了解决这个问题,...

    PLSQL学习资料 PLSQL学习资料 PLSQL学习资料

    PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 ...

    安装包PLSQL安装包PLSQL安装包PLSQL

    安装包PLSQL安装包PLSQL安装包PLSQL提取方式是百度网盘分享地址

    plsql 32位下载

    PLSQL Developer是一款强大的Oracle数据库管理工具,主要针对PL/SQL语言进行开发、调试和管理。在32位操作系统环境下,用户可能需要下载适用于该系统的PLSQL Developer版本。本指南将详细介绍如何下载并安装32位...

    PLSQL免安装版本下载

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在许多情况下,用户可能需要PLSQL的免安装版本,这可能是出于便携性、节省系统资源或者避免系统冲突的考虑。标题...

    plsql developer 12 注册码

    plsql developer plsql developer plsql developer plsql developer plsql developer

    PLSQL安装包及解决PLSQL过期文件

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。

    PlSql中的 CnPlugin 插件

    **PlSql中的CnPlugin插件详解** PL/SQL Developer(简称PLSQL)是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,它为数据库管理员和开发人员提供了强大的功能,包括编写、调试、执行SQL和...

    PLSQL14_32位

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序单元。这个"PLSQL14_32位"压缩包文件很可能是PLSQL Developer的第14版本,专为32位操作系统设计。如果你的计算机上已经...

    PLSQL_Developer8.0绿色版64位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为PL/SQL编程语言设计,它提供了一整套集成环境,便于开发、调试、管理以及执行PL/SQL代码。标题中的"PLSQL_Developer8.0绿色版64位"指的是该版本是针对64位...

    plsql developer9.0破解版

    plsql developer9 0破解版 PLSQL Developer 9 0 0 1601破解版本使用了8 0的汉化包 可以正常使用 无需注册 默认为英文 点击菜单tools preferences appearance language 选择简体中文即可切换到简体中文界面 如果...

    plsql11安装包文件

    plsql11安装包文件

    PLSQL Developer 8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和...

    PLSQL Developer14用户指南

    PLSQL Developer 14用户指南 PLSQL Developer 14用户指南是Oracle公司出品的一款专业database开发工具,旨在帮助用户快速掌握PL/SQL语言编程。该指南详细介绍了PL/SQL Developer 14的安装、配置、编程和调试等方面...

    PLSQL程序优化和性能分析方法

    PLSQL程序优化和性能分析方法 PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体...

    PLSQL developer 64 位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑器和全面的调试功能而受到广大数据库管理员和开发者的青睐。在"PLSQLDeveloper_解压版(64位...

    PLSQL 操作学习文档

    PLSQL(Procedural Language/Structured Query Language)是Oracle数据库中的一个强大工具,它结合了SQL的查询功能和过程性编程语言的特点,使得数据库管理、数据处理和应用程序开发更为便捷。"PLSQL Developer"是一...

    PLSQL注册机激活 通用

    PLSQL Developer是一款强大的Oracle数据库开发工具,由Allround Automations公司开发。它为数据库管理员、开发者和测试人员提供了集成的环境,便于编写、调试、执行和管理PL/SQL代码。这款软件通常需要购买许可证...

    PLSQL简易教程学过以后plsql不愁

    "PLSQL简易教程学过以后plsql不愁" PLSQL 是 ORACLE 对标准数据库语言的扩展,ORACLE 公司已经将 PLSQL 整合到 ORACLE 服务器和其他工具中了,近几年中更多的开发人员和 DBA 开始使用 PLSQL。本文将讲述 PLSQL 基础...

    PLSQL *64

    PLSQL,全称为“Procedural Language/Structured Query Language”,是Oracle公司为在其数据库系统中进行结构化编程而设计的一种编程语言。它扩展了SQL,允许开发者编写存储过程、函数、包、触发器等,提供了更强大...

Global site tag (gtag.js) - Google Analytics