没说完,接着来。
一.过程的实现
2010年最后一个多月基本在捣腾总部报表那块,改动起来挺让人不舒服的。具体表现为报表中全部使用的是视图,另外业务关系没有相关的文档,而且很多视图有问题,甚至有些表已经基本面目全非,或者压根就没有了,所以实在比较闹心。但是总体来说,也就那么回事,改呗!正是利用这段时间,好好地把数据库编程给落实了,并且基本能拿oracle编程实现的东西就能oracle编程实现,还是有些收获的。
过程在游标那块已经有所接触了,那么这里看个静态执行sql语句的过程:
create or replace procedure updateRe_SQL(id sys_report_file.fi_id%type) is
i int;
time1 varchar2(10);
time2 varchar2(10);
fl_id varchar2(4);
s varchar2(4);
begin
i:=0;
time1:=dbms_utility.get_time;
for i in 1..500 loop
select t.fi_id into fl_id from sys_report_file t where t.fi_id=id;
dbms_output.put_line('执行成功'||i||'条,id='||fl_id);
s:=i;
end loop;
time2:=dbms_utility.get_time;
dbms_output.put_line('时间差:'||round((time2-time1)/100,2));
exception
when no_data_found then
dbms_output.put_line('没有数据,中断:'||i);
s:=s+2;
dbms_output.put_line('没有数据,中断:'||s);
updateRe_SQL;
when others then
dbms_output.put_line('其它错误中断:'||i);
end updateRe_SQL;
很简单的东东,这里也不做详解。为了程序的健壮性,建议写上异常处理。
二.函数的实现
函数,哎!到处都是函数,Java有函数,Javascript也有函数,只要是编程语言,基本都有函数这一说。废话不多说,讲下我使用过的函数呗。
-- Created on 2010/12/20 by LW
create or replace function exception_sele(num in number) return varchar2 is
fl_id varchar2(20);
i int;
begin
i := num;
select t.FILENAME into fl_id from ktsys.sys_report_file t where t.fi_id = i;
return fl_id;
exception
when no_data_found then
return '没数据';
when others then
return '有问题';
end;
同样建议写异常处理。函数需要注意的是返回值的大小,如果返回值过小很有可能出现一些问题。也不是什么难的东东。
三.触发器的实现
触发器在项目组使用比较多,至少在某些表数据的操作时,使用了触发器。记得宿舍一哥们问他们项目需要使用按时间点进行数据操作,问有什么方式。这个它采用java编程进行实现,我觉得完全用触发器进行实现完全可能。只要数据库服务开着,某事件的触发将引起相应触发器执行,这样也便于维护。网上到时间点进行操作的触发器很多,这里没必要进行述说。另外我们做的系统中,对于触发器使用了Freemarker模板引擎,这里涉及到一些知识点,这里也不详说。举个自己写的简单触发器例子吧。
Before操作:
create or replace trigger ins
before insert or update or delete on sys_report_file
begin
if to_char(sysdate,'DY') in ('星期三','星期四') then
case when inserting then
raise_application_error(-20001,'fail to insert');
when updating then
raise_application_error(-20001,'fail to update');
when deleting then
raise_application_error(-20001,'fail to delete');
end case;
end if;
end ins;
After操作:
Create or replace trigger tr_audit_emp
After insert or update or delete on ktsys.sys_report_file
Declare
v_temp int;
Begin
Select count(*) into v_temp from ktsys.sys_report_file;
If v_temp = 0 then
raise_application_error(-20001,'fail to insert');
End if;
case
when inserting then
raise_application_error(-20001,'fail to insert');
when updating then
raise_application_error(-20001,'fail to update');
when deleting then
raise_application_error(-20001,'fail to delete');
end case;
end tr_audit_emp;
四.Oracle与Java的接触
总算要结束了,也快好几千个字,说明oracle数据库这块还是知道点东西了,明年一定要在质上有提高,到时就不是提高数据库编程能力,而应该将oracle的内部机制进行提高。
Oracle能够写java代码吗?可能没试过吧,答案是肯定的,只是一般不用,但是有时候遇到一些数据处理,用oracle费劲的话,倒是可以考虑用这东东整一下。不说废话,只说具体操作。
1. 建立java代码
create or replace and compile java source named mysource as
import java.util.Date;
public class Hello{
public static void main(String []args){
System.out.println("Hello");
}
public static Date getDate(String str){
System.out.println("Hello"+str);
return new java.util.Date();
}
}
很明显,两个静态函数,这里说一下,这里写的java代码用静态的static,否则会有问题。
2. 建立函数
create or replace function rand(str in string) return varchar2
AS
language Java Name 'Hello.getDate(java.lang.String) return Date';
怎么调用,哥就不说了。小屁东西。
3. 建立过程
create or replace procedure TransMetaData(str in string) as
--language java name 'Hello.main(java.lang.String[])'; --貌似只能一个,
language java name 'Hello.getDate(java.lang.String)';
怎么调用,哥还是不说。
ok!基本该说的也说了。原来我肚子里存的数据库房门的知识就这么点,哎!继续武装自己。
分享到:
相关推荐
Oracle 2010是一个关于Oracle数据库在2010年相关知识的综合主题,包含了历史、技术学习资料以及可能的项目管理内容。以下是对这些文件内容的详细解读: 1. **Oracle公司历史**: itpub.net上的"Oracle_Company_...
标题“qt5.5 msvc2010 oracle11.2 oci”涉及的是一个集成开发环境(IDE)Qt 5.5版本与Microsoft Visual Studio 2010(MSVC2010)的结合,用于连接Oracle 11.2数据库的 OCI(Oracle Call Interface)库的构建和使用。...
本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...
VS2010远程连接oracle数据(两种方式) OLeDbConnection; OracleConnection 内附详细源代码
主要讲述了oracle的详细知识点,通过一些详细的例子能够让您面试的时候顺顺利利
VS2010如何Oracle创建数据实体模型
Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer 不用安装Oracle客户端也可以使用PLSQL Developer 绿色! 安全! 轻便! 可靠! 1、本软件可作为简单的Oracle9i客户端...
首先,Oracle.ManagedDataAccess是Oracle公司提供的一个纯.NET框架的客户端驱动,它允许开发者在不安装Oracle客户端的情况下,直接与Oracle数据库进行交互。这个库包含了所有必要的组件,使得C#程序可以方便地执行...
cx_Oracle是Python数据库API规范的实现,用于访问Oracle数据库。目前,该模块经过对Oracle客户端版本11.2、12.1和12.2以及Python版本2.7、3.4、3.5和3.6的测试。cx_Oracle遵循开源的BSD许可证,这表示用户可以自由地...
Oracle JDBC驱动包是Oracle数据库与Java应用程序之间进行通信的关键组件,它使得Java程序员能够通过编写Java代码来操作Oracle数据库。标题中的"ojdbc6"指的是Oracle JDBC驱动的一个特定版本,适用于Java SE 6环境。...
Oracle Client是Oracle公司提供的数据库连接工具,用于与Oracle数据库服务器进行通信。19C是Oracle Database的一个版本,代表第19个主要版本。这个压缩包包含的Oracle Client适用于Windows和Linux操作系统,使得...
Dbmover for Mysql to Oracle 是高效的将Mysql导入到Oracle数据库的工具。 使用DBMover可以灵活定义Mysql和Oracle之间表和字段的对照关系,也可以在DBMover创建一个查询,把查询结果当作源表转入到Oracle中。 ...
cx_Oracle是Python编程语言中用于连接Oracle数据库的一个模块。该模块遵循Python数据库API规范,并且适用于Oracle 11.2和12.1版本,同时兼容Python 2.x和3.x版本。cx_Oracle模块通过使用Oracle客户端库来实现与...
Preface 1 Introduction Course Objectives 1-2 Suggested Schedule 1-3 Lesson Objectives 1-4 Oracle Products and Services 1-5 ...Oracle Internal & Oracle Academy Use Only.............................
在文档的最后,通常会有一个实验总结部分,对整个安装过程中的关键步骤和遇到的问题进行总结回顾,并对可能出现的常见问题进行解释。 在实际操作时,需要注意的是,文档中提到的某些步骤可能会因为Oracle和Red Hat...
oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...
oci.dll是Oracle Call Interface的缩写,它是Oracle数据库的一个核心组件,允许开发者使用各种编程语言与Oracle数据库进行交互。在Oracle 10G和11G版本中,oci.dll扮演了至关重要的角色,为应用程序提供了访问数据库...
首先,连接Oracle数据库通常需要Oracle客户端软件,但这里提到的“Sqldbx连接oracle,不用安装client”,意味着SqlDbx可能通过一种无需完整Oracle客户端的方式来实现连接。这种连接方式通常依赖于Oracle的Instant ...
Oracle客户端免安装版,也被称为Oracle Instant Client,是Oracle公司提供的一种轻量级的数据库连接工具,无需完整的Oracle数据库服务器安装即可使用。它主要用于在不安装完整客户端的情况下,实现应用程序与Oracle...
Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ODTwithODAC1020221.exe 235 MB(247,296,458 字节) ODAC 安装说明 Oracle Developer Tools For Visual ...