`

存储过程学习 第11章 之2

阅读更多
--------游标使用 
declare
	cursor c1 is
		select * from emp;
begin
	for rec in c1 loop
		dbms_output.put_line(rec.ename||','||rec.job);
	end loop;
end;

------------隐式游标
drop table templ;
create global temporary table templ  --全局临时表
(name varchar2(10),deptno varchar2(15),sal varchar2(20));
declare
	cursor c1 is 				--cursor
		select * from emp;
	cursor_rec c1%rowtype;                  --cursor variable
	
	cursor c2(v emp.deptno%type) is 
		select * from emp where deptno=v;--带参数游标
	
begin
 	open c1;  --open
	loop
		fetch c1 into cursor_rec; --fetch
		exit when c1%notfound;
		insert into templ values
		(cursor_rec.ename,cursor_rec.deptno,cursor_rec.sal);	
	end loop;
	close c1;	--close
end;

select replace('aaa-hell-bbb','-') from dual;
---------------------管道
grant execute on dbms_pipe to scott;
execute p1;

CREATE OR REPLACE PROCEDURE p1 IS
  status   INTEGER;
  response VARCHAR2(2000);
BEGIN
  dbms_pipe.reset_buffer; --重置缓冲
  dbms_pipe.pack_message('This is message 1'); --pack
  dbms_pipe.pack_message('This is message 2');
  status := dbms_pipe.send_message('HOME_OF_P2'); --send
  --status := dbms_pipe.receive_message('HOME_OF_P1', 60); --receive
  --dbms_pipe.unpack_message(response); --unpack
  --dbms_output.put_line('p1 receive:' || response);
END;

CREATE OR REPLACE PROCEDURE p2 IS
  status       INTEGER;
  message1     VARCHAR2(2000);
  message2     VARCHAR2(2000);
  message      VARCHAR2(2000);
  message_part VARCHAR2(2000);
  empty_buffer EXCEPTION;
  PRAGMA EXCEPTION_INIT(empty_buffer, -6556);
BEGIN
  FOR i IN 1 .. 2 LOOP
    status := dbms_pipe.receive_message('HOME_OF_P2', 60); --receive 等待
    BEGIN
      WHILE (dbms_pipe.next_item_type = 9) LOOP
        dbms_pipe.unpack_message(message_part); --unpack
        message := message || '-' || message_part;
      END LOOP;
    EXCEPTION
      WHEN empty_buffer THEN
        NULL;
    END;
  END LOOP;
  dbms_pipe.pack_message('Got p1 message'); --pack
  status := dbms_pipe.send_message('HOME_OF_P1'); --send
  dbms_output.put_line('p2 receive:' || message);
END;




----------------trigger
create or replace trigger professors_aur
after update on professors --更新教授表后
for each row 								--对每一行
when (old.salary<>new.salary)
begin
	-----:new.prof_name
end;

---------自定义异常
customer_exp expection;
raise ...;
----------错误作为异常抛出

--------------警报
  PROCEDURE send_alert(message IN VARCHAR2) IS
  BEGIN
    dbms_alert.signal('email_notification', message); --send
  END;

  PROCEDURE process_alerts IS
    professor_email VARCHAR2(100);
    status          INTEGER;
  BEGIN
    dbms_alert.register('email_notification'); --register (先注册)
    FOR i IN 1 .. 3 LOOP
      dbms_alert.waitone('email_notification', professor_email, status, 10); --wait
      IF status = 0 THEN
        EXIT WHEN professor_email = 'END';
        email_pkg.send('admin@school.com', professor_email, 'Salary', 'Salary has change');
      END IF;
    END LOOP;
  END;

CREATE OR REPLACE PACKAGE BODY email_pkg IS
  g_smtp_server      CONSTANT VARCHAR2(20) := '00.00.00.00';
  g_smtp_server_port CONSTANT PLS_INTEGER := 25;

  PROCEDURE send(p_sender    IN VARCHAR2,
                 p_recipient IN VARCHAR2,
                 p_message   IN VARCHAR2,
                 p_subject   IN VARCHAR2) IS
    mail_conn utl_smtp.connection;
  BEGIN
    mail_conn := utl_smtp.open_connection(g_smtp_server, g_smtp_server_port); --open
    utl_smtp.helo(mail_conn, g_smtp_server);
    utl_smtp.mail(mail_conn, p_sender);
    utl_smtp.rcpt(mail_conn, p_recipient);
  
    utl_smtp.open_data(mail_conn);
    utl_smtp.write_data(mail_conn, 'From: "' || p_sender || '" <' ||
                         p_sender || '>' || utl_tcp.CRLF);
    utl_smtp.write_data(mail_conn, 'To: "' || p_recipient || '" <' ||
                         p_recipient || '>' || utl_tcp.CRLF);
    utl_smtp.write_data(mail_conn, 'Subject: ' || p_subject || utl_tcp.CRLF);
    utl_smtp.write_data(mail_conn, utl_tcp.CRLF || p_message);
    utl_smtp.quit(mail_conn);
  END;
END email_pkg;

/****************
	aaaa,bbbb,ccc
	
*****************/
create or replace function next_token 
	(base_string in varchar2,look_for in varchar2,startAt in integer,
	positionAt out integer) return boolean is
	result integer;
begin
	instr(base_string,look_for,startAt)
end;

select instr('aaaa,bbb,ccc,dd',',',1,2) from dual;

declare
	baseString varchar2(20):='aa,bbbb,ccc,ddd';
	token varchar2(5):=',';
	a natural:=1;
	b natural:=1;
begin
	loop
		b:=instr(baseString,token,a);
		if b=0 then 
			dbms_output.put_line(substr(baseString,a));
			exit;
		end if;
		dbms_output.put_line(substr(baseString,a,b-a));
		a:=b+1;
	end loop;
end;

select translate('abcabcbca','abc','xyz') from dual;
select initcap('NEW YORK') from dual;
select sqrt(2) from dual;

declare 
	n number;
begin
	dbms_random.seed(123333456);
	n:=dbms_random.value(10,100);
	dbms_output.put_line(n);
end;

分享到:
评论

相关推荐

    SQLServer2008数据库基础入门教程含思考题练习题 第11章 存储过程 触发器和函数 共62页.ppt

    本章主要关注存储过程、触发器和用户定义函数。 **存储过程**是数据库中的重要组成部分,它是一个预编译的SQL代码模块,可以高效地执行特定任务,并且是可重用的。存储过程分为三种类型:用户定义存储过程、扩展...

    信息存储与检索 张帆 课件4-11章

    张帆教授的这门课程涵盖了从第4章到第11章的内容,涉及了信息存储系统的基础理论、技术和实践应用。在这个压缩包中,22236-00_1-3可能是课件的组成部分,可能包括讲义、幻灯片或者其他教学材料。 信息存储与检索的...

    SQL Server 2008完全学习手册视频教程.zip

    第11章 SQL Server 2008的安全机制 第12章 备份与恢复数据库 第13章 自动化SQL Server 2008数据库 第14章 集成服务 第15章 报表服务 第16章 分析服务 第17章 使用.NET 访问SQL Server 2008 第18章 监视SQL Server ...

    第四十七章:ISCSI 企业共享存储方案.pdf

    第四十七章:ISCSI 企业共享存储方案 本章节主要讲述了企业共享存储方案中的ISCSI技术,涵盖了存储概述、存储分类、ISCSI概念、ISCSI技术的应用等内容。通过本章节的学习,读者将了解到企业存储应用内容、存储分类...

    C++ Primer Plus 编程练习源码工程 第11章

    在第11章的练习中,你可能会接触到如何使用STL容器存储和操作数据,以及如何使用STL算法进行排序、查找等操作。 3. **面向对象编程(OOP)**:C++是一种支持面向对象编程的语言,第11章可能涉及继承、多态和封装等...

    C#语言和SQL Server数据库基础第11章.zip

    在这一章,你将学习如何定义和实例化类,理解类和对象的关系,以及如何使用构造函数和析构函数。此外,还将深入学习C#中的控制流语句,如if条件判断、switch语句、循环(for、while、foreach)以及异常处理机制。 ...

    mysql学习重点总结(小白适合学习哦)

    第18章 主从复制.assets第17章 其它数据库日志.assets第16章 多版本并发控制,assets第15章 锁,assets第14章 MySQL事务日志.assets第13章 事务基础知识.assets第12章 数据库其它调优策略,assets第11章 数据库的设计...

    ACCP8.0S2-Y2转换教材第十一章

    【ACCP8.0S2-Y2转换教材第十一章】是针对青鸟教育体系中第八版第二阶段的编程课程内容,重点讲解了在实际项目开发中的编程技术和实践。"详细注释源码"意味着这份教材不仅包含了理论知识,还提供了带有注释的代码示例...

    联想DM存储设备 netapp 设备ontap概念指南

    最后,第十五章介绍了ONTAP的发布模型,这有助于用户了解软件更新和版本控制的过程。第十六章则提供了进一步学习和获取支持的资源。 综上所述,《联想DM存储设备 NetApp设备ONTAP概念指南》是一份全面的技术资料,...

    ORACLE学习笔记2:日常应用、深入管理、性能优化.

    第11章 PL/SQL语言基础 第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL...

    疯狂Android讲义第二版光盘源码(第十一章到十五章)

    《疯狂Android讲义第二版》是一本深入浅出的Android开发教程,其光盘源码涵盖了从第十一章到第十五章的重要知识点。这些章节主要涉及Android应用开发的高级技术,包括用户界面优化、多媒体处理、网络编程、数据存储...

    MySQL8.0学习第一章

    【MySQL8.0学习第一章】 在本章的学习中,我们将深入了解MySQL数据库系统,这是一个广泛应用于各种行业的关系型数据库管理系统(RDBMS)。首先,我们从基础出发,了解数据库的概论,包括数据、数据库、数据库管理...

    数据库系统概论_王 珊_课后习题答案(全)

    第十一章至第十三章则关注数据库的安全性和完整性,包括访问控制、权限管理以及触发器和存储过程的使用。习题可能涉及如何设置用户权限,或者设计能够确保数据完整性的触发器。 最后,第十四章可能涉及数据库的备份...

    数据结构第十一章课件

    ### 数据结构第十一章知识点详解 #### 一、章节概述 本章节主要介绍了高级线性表中的几个核心概念和技术,包括多维数组、广义表以及存储管理技术。通过学习这些内容,我们可以更好地理解如何有效地组织和处理复杂的...

    第十、十一讲第6章函数、存储类和预处理程序PPT学习教案.pptx

    2. **外部型(extern)**:如果一个变量在函数外部声明,它就是一个外部变量,可以在整个程序中访问。例如,全局变量默认具有外部存储类别。 3. **静态型(static)**:静态变量的生命周期贯穿整个程序的执行过程,而...

    DAMA学习笔记-第01-17章细化第5章数据建模较多内容.pdf

    第11章 数据仓库和数据智能 数据仓库和数据智能是指对数据的存储和分析,以支持业务决策和intelligence。这一章节主要介绍了数据仓库和数据智能的定义、重要性、方法和工具。 第12章 元数据管理 元数据管理是指对...

    数据库基础学习从零开始全面分析数据库 初学者的最佳选择

    第6章_视图、存储过程和自定义函数_V08_2 第7章_关系数据库规范化理论_V08_2 第8章_数据库设计_V08_2 第9章_数据库完整性约束_V08_2 第10章_数据库安全性_V08_2 第11章_数据库的备份与恢复技术_V08_2 第12章_面向...

    android 从入门到精通第11,13,14,15章书中源代码

    这一章可能涵盖了XML布局文件的创建,包括线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)和网格布局(GridLayout)等基本布局类型。此外,还可能讲解了如何使用View和 ViewGroup,...

    《学习opencv》第十一章标定程序可运行代码

    《学习OpenCV》第十一章主要讲解了相机标定的过程,这是计算机视觉领域的一个关键步骤,用于纠正由相机镜头引起的图像畸变,并获取相机的内在参数。本章的可运行代码提供了实现这一过程的实际示例,帮助读者深入理解...

Global site tag (gtag.js) - Google Analytics