- 浏览: 137924 次
文章分类
最新评论
-
qiaolevip:
求源码:qiaole@vip.qq.com
使用JAVA中的动态代理实现数据库连接池 -
qiaolevip:
使用JAVA中的动态代理实现数据库连接池 -
qiaolevip:
:ro ll:
使用JAVA中的动态代理实现数据库连接池 -
qp7711:
那这里是在哪里传参的?
通用分页实现及其OO设计探讨——转载 -
yaoaijia:
源码怎么都没有啊?
使用JAVA中的动态代理实现数据库连接池
配置信息中存在着大量的SQL语句块。在此主要讲述语句块的写法和我们在写语句块的过程中须遵循的规则。<o:p></o:p>
<o:p> </o:p>
系统中的语句块大体可以分为两类:<o:p></o:p>
一、 只是让数据库执行某些功能<o:p></o:p>
这种SQL语句存在于文书关系中新加时的特殊数据操作、编辑时的特殊数据操作、删除时的特殊数据操作、审批点设置中同意的特别操作、不同意的特别操作、更多操作的设定、审批完后的数据处理、管理员修改审批意见时的特殊操作 <o:p></o:p>
要想使这种语句块能够在Oracle里正确执行,必须做相应的处理,有以下几个方面:<o:p></o:p>
必须以begin开头,并且以end;结尾; <o:p></o:p>
如果语句块中有变量申明,须把变量声明在最前面;为了区分,我们约定语句块中用到的所有变量均以v_开头;<o:p></o:p>
必须遵照Oracle语法,Oracle用的是PL-SQL。有关PL-SQL和T-SQL的区别请参见附录。<o:p></o:p>
下面给出一个语句块的模板:(嫌疑人新增时的特殊操作)
- declare
- v_bianhao VARCHAR2(20);
- v_Year INT;
- v_MaxYear INT;
- v_MaxNumber INT;
- v_TempStr CHAR(7);
- v_quhao NVARCHAR2(6);
- ErrVal INT;
- v_MingCheng VARCHAR2(2000);
- v_XYR_XingMing VARCHAR2(100);
- v_AnJianID VARCHAR2(100);
- CALLINGPROCASSIGNTEMP1 VARCHAR2(33);
- CALLINGPROCASSIGNTEMP2 VARCHAR2(33);
- BEGIN
- --公安局的区号
- v_quhao := GetSystemValue('quhao');
- /*取当前的年份*/
- SELECT TO_NUMBER(TO_CHAR((SYSDATE), 'YYYY')) INTO v_Year FROM DUAL;
- /*从库中取最大的年份*/
- BEGIN
- FOR REC IN (SELECT NVL(MAX(CAST(SUBSTR(SUBSTR(BianHao,
- LENGTH(BianHao) - 11 + 1,
- 11),
- 0,
- 4) as int)),
- 0) TEMP_ALIAS_0
- FROM XZ_XianYiRen) LOOP
- v_MaxYear := REC.TEMP_ALIAS_0;
- END LOOP;
- END;
- --如果当前年份大于库中年份,则从第一号开始
- IF v_Year > v_MaxYear THEN
- BEGIN
- SELECT 'Y' || v_quhao || CAST(v_Year as char(4)) || '0000001'
- INTO v_bianhao
- FROM DUAL;
- END;
- ELSE
- --否则在原号上累加
- BEGIN
- BEGIN
- FOR REC IN (SELECT NVL(MAX(SUBSTR(BianHao,
- LENGTH(BianHao) - 7 + 1,
- 7)),
- 0) TEMP_ALIAS_0
- FROM XZ_XianYiRen
- WHERE SUBSTR(RTRIM(LTRIM(BianHao)), 0, 11) =
- 'Y' || v_quhao || CAST(v_Year as char(4))) LOOP
- v_MaxNumber := REC.TEMP_ALIAS_0;
- END LOOP;
- END;
- v_TempStr := lpad(v_MaxNumber + 1, 7, '0');
- SELECT 'Y' || v_quhao || CAST(v_Year as char(4)) || v_TempStr
- INTO v_bianhao
- FROM DUAL;
- END;
- END IF;
- UPDATE xz_xianyiren SET bianhao = v_bianhao WHERE IIDD = '[TableIIDD]';
- BEGIN
- FOR REC IN (SELECT XingMing, AnJianID
- FROM xz_xianyiren
- WHERE IIDD = '[TableIIDD]') LOOP
- v_XYR_XingMing := REC.XingMing;
- v_AnJianID := REC.AnJianID;
- END LOOP;
- END;
- BEGIN
- FOR REC IN (SELECT MingCheng FROM GG_AnJian WHERE AnJianID = v_AnJianID) LOOP
- v_MingCheng := REC.MingCheng;
- END LOOP;
- END;
- UPDATE GG_AnJian
- SET MingCheng = v_XYR_XingMing || v_MingCheng
- WHERE AnJianID = v_AnJianID;
- CALLINGPROCASSIGNTEMP1 := '[TableName]';
- CALLINGPROCASSIGNTEMP2 := '[TableIIDD]';
- SET_XZ_OtherUpdate(CALLINGPROCASSIGNTEMP1, CALLINGPROCASSIGNTEMP2);
- END;
一、 让数据库执行某些功能并且返回不定数目的数据集<o:p></o:p>
这种SQL语句块广泛存在于管理数据列中触发变化的SQL语句、默认值,文书关系中<o:p></o:p>
首次读取时的特殊操作,文书浏览、添加、编辑、删除、LOAD权限设置,审批点设置中开始特殊判断、同意进入下一步的通知内容格式、不同意进入下一步通知内容格式、通知内容格式、更多操作的选择值设定、下级【是否同意】默认值、下级【更多操作】默认值、【是否同意】触发变化的SQL语句、【是否同意更多操作】触发变化的SQL语句<o:p></o:p>
同样,这种语句块需要遵循第一种语句块的所有规则。另外,它还有一些特殊的写法:<o:p></o:p>
1、所有返回数据集的SQL语句需要修改为已隐式游标返回数据集:<o:p></o:p>
原来的Select * from CertainTable语法,需要写成open :cur_REC1 for Select * from CertainTable; 其中cur_REC1是游标的名称,转换过程中,游标名称必须以cur_开头,并且在游标的名称前面加冒号,加冒号表明声明了一个隐式的游标。<o:p></o:p>
2、在实际运行过程中,语句块中的某些返回游标可能没有被执行,例如<o:p></o:p>
<o:p>- If trim(‘[InValue]’) is null then
- Begin
- Open :cur_RCT1 for select ‘1’ from dual;
- End;
- Else
- Begin
- Open :cur_RCT2 for select ‘2’ from dual;
- Open :cur_RCT3 for select ‘3’ from dual;
- End;
- End if;
这种语句块,在运行过程中,最终返回的游标数量是不确定的,而.net在执行oracle语句块返回记录集的时候要求不论程序走哪条路径,返回的记录集的数量是相等的。这就需要我们做一些特别的处理:<o:p></o:p>
只要语句块中需要返回数据集的地方,我们都用一个新的游标来返回,就象上面的语句块一样,每一个游标的名称都是不重复的。但是需要在语句块的最开始的时候先打开所有下面要用到的游标。<o:p></o:p>
改造后的语句块如下:
- Open :cur_RCT1 for select ‘’ from dual;
- Open :cur_RCT2 for select ‘’ from dual;
- Open :cur_RCT3 for select ‘’ from dual;
- If trim(‘[InValue]’) is null then
- Begin
- Open :cur_RCT1 for select ‘1’ from dual;
- End;
- Else
- Begin
- Open :cur_RCT2 for select ‘2’ from dual;
- Open :cur_RCT3 for select ‘3’ from dual;
- End;
- End if;
同一个游标可以被重复打开,并且以最后一次打开时选择出的资料为准。<o:p></o:p>
语句块最开始时统一打开所有游标的时候,打开顺序必须跟后面的游标在语句块中出现的物理顺序一致。例如,上面的语句块在最初打开时就不能先打开cur_RCT2再打开cur_RCT1<o:p></o:p>
3、为了节省资源,在有的比较简单并且结构很清晰的语句块中,可以不遵循第2条所讲述的方法。上面的方法是在逻辑比较复杂的时候不得已而采用的方法。<o:p></o:p>
例如:<o:p></o:p>
<o:p>- If trim(‘[InValue]’) is null then
- Begin
- Open :cur_RCT1 for select ‘1’ from dual;
- End;
- Else
- Begin
- Open :cur_RCT2 for select ‘2’ from dual;
- End;
- End if;
以上语句块就可以只使用一个游标,并且不用在最开始的时候先打开。可以修改为:
- If trim(‘[InValue]’) is null then
- Begin
- Open :cur_RCT1 for select ‘1’ from dual;
- End;
- Else
- Begin
- Open :cur_RCT1 for select ‘2’ from dual;
- End;
- End if;
4、所有文书的IIDD触发变化的SQL语句的最前端需要增加对退查的特别处理<o:p></o:p>
-----------------退查的处理,所有文书的IIDD触发都需要增加此段
- SP_OnChange_TuiCha('[TableName]','[TableIIDD]','[Obj=Session]BianHao[/Obj]',
- '[Obj=QueryString]AnJianID[/Obj]',v_IsTuiCha);
- if v_IsTuiCha='1' then
- begin
- open :cur_RCT1 for select 'AllControl' as EnableControl from dual;
- end;
- end if;
- ----------------------------------------------------------
IIDD触发变化的SQL语句块模板:(刑事,接受案件登记表)
- declare
- v_isrole varchar2(1);
- v_result varchar2(1000);
- v_XianShiBuMenGongZhang varchar2(10);
- v_XianShiGongAnJuGongZhang varchar2(10);
- v_IsTuiCha varchar2(1) := '0';
- begin
- open :cur_RCT1 for select '' from dual;
- open :cur_RCT2 for select '' from dual;
- open :cur_RCT3 for select '' from dual;
- open :cur_RCT4 for select '' from dual;
- open :cur_RCT5 for select '' from dual;
- open :cur_RCT6 for select '' from dual;
- open :cur_RCT7 for select '' from dual;
- open :cur_RCT8 for select '' from dual;
- -----------------退查的处理,所有文书的IIDD触发都需要增加此段
- SP_OnChange_TuiCha('[TableName]',
- '[TableIIDD]',
- '[Obj=Session]BianHao[/Obj]',
- '[Obj=QueryString]AnJianID[/Obj]',
- v_IsTuiCha);
- if v_IsTuiCha = '1' then
- begin
- open :cur_RCT1 for
- select 'AllControl' as EnableControl from dual;
- end;
- end if;
- ----------------------------------------------------------
- if ('[InValue]' = '0') then
- begin
- open :cur_RCT2 for
- select 'ChuLiJieGuo' as DisableControl from dual;
- end;
- else
- begin
- open :cur_RCT3 for
- select 'SunDun_OnChange(''JieShouLeiXing'');' as command from dual;
- sp_Check_ShenPi_IsRole('[TableName]',
- '[TableIIDD]',
- '[Obj=Session]BianHao[/Obj]',
- v_isrole);
- IF v_isrole = '0' then
- begin
- open :cur_RCT4 for
- select 'AllControl' as DisableControl from dual;
- v_result := '';
- GetColumnValue('[TableName]',
- '[TableIIDD]',
- 'ChuLiJieGuo',
- v_result);
- if (trim(v_result) is null) then
- begin
- open :cur_RCT5 for
- select 'ChuLiJieGuo' as EnableControl from dual;
- end;
- end if;
- end;
- else
- begin
- open :cur_RCT6 for
- select 'ChuLiJieGuo' as DisableControl from dual;
- end;
- end if;
- --vicky,2005-8-8
- --当单位领导审批意见不是"初查"和"转为行政案件",
- --并且局长还没有审批时,编辑页面不显示单位领导的意见和单位领导的签名
- ----------------------------------------------------------------
- begin
- for REC in (select XianShiBuMenGongZhang, XianShiGongAnJuGongZhang
- from TableName
- where iidd = '[InValue]') loop
- v_XianShiBuMenGongZhang := REC.XianShiBuMenGongZhang;
- v_XianShiGongAnJuGongZhang := REC.XianShiGongAnJuGongZhang;
- end loop;
- end;
- if trim(v_XianShiBuMenGongZhang) is null and
- trim(v_XianShiGongAnJuGongZhang) is null then
- begin
- --以上条件为真,表明单位领导审批意见不是"初查"和"转为行政案件",
- --并且局长还没有审批
- --此时的编辑页面不要显示部门领导的意见
- open :cur_RCT7 for
- select 'document.all.LingDaoPiShi1.style.display="none";
- document.all.LingDaoPiShi2.style.display="none";
- document.all.LingDaoPiShi3.style.display="none";' as command
- from dual;
- end;
- end if;
- ----------------------------------------------------------------
- end;
- end if;
- if instr('[Obj=Session]Roles[/Obj]', '000001') > 0 then
- begin
- open :cur_RCT8 for
- select 'AllControl' as EnableControl from dual;
- end;
- end if;
- end;
<o:p></o:p>
<o:p></o:p></o:p>发表评论
-
Oraclcle字符集计算汉字长度问题总结
2008-01-11 09:52 3506前言 在历史数据转 ... -
DataSource的创建过程
2008-01-07 11:26 1975public class TestDataSource { ... -
oracle 10g 和 oracle 9i clob 的区别
2008-01-07 10:39 5209最近,在做历史数据迁移项目时,用hibernate3.2 插入 ... -
Oracle的Package的作用以及使用什么工具编写
2007-08-01 15:24 125671、Oracle的Package除了把存储过程放到一堆儿以外还 ... -
用视图能显示单行超过255个字符的例子
2007-07-26 15:11 2141sql 代码 /* ...
相关推荐
OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...
以下是对"Oracle的SQL语句的一些经验总结"中可能涉及的关键知识点的详细阐述: 1. **基本查询**:SQL的基础是SELECT语句,用于从表中提取数据。例如,`SELECT column1, column2 FROM table_name;`用于获取指定列的...
下面将对ORACLE数据库SQL语句编写优化进行详细的总结。 首先,选择适合的ORACLE优化器至关重要。ORACLE提供了三种优化器模式:RULE(基于规则)、COST(基于成本)和CHOOSE(选择性)。在实际应用中,数据库管理员...
这份"ORACLE数据库SQL语句编写优化总结"文档很可能是对如何提高SQL查询性能、减少资源消耗以及提升系统整体效率的详细阐述。以下是根据标题和描述推测的一些关键知识点: 1. **查询优化基础**: - **索引的使用**...
Oracle 高效 SQL 语句原则是指在编写 Oracle 数据库 SQL 语句时需要遵循的一些基本原则,以便提高 SQL 语句的执行效率,减少数据库服务器的负载,提高应用程序的性能。下面是 Oracle 高效 SQL 语句原则的详细介绍: ...
在Oracle数据库中,SQL语句是与数据库进行交互的主要方式。本文将总结一些Oracle基本SQL语句,帮助用户快速复习并掌握其用法。 首先,了解SQL(结构化查询语言)的基础功能是十分必要的。SQL由一系列命令组成,这些...
### SQL语句编写规则 - **大小写不敏感**:SQL语句在Oracle中不区分大小写。 - **多行书写**:SQL语句可以写在一行内,也可以拆分成多行,提高代码的可读性。 - **关键字规则**:关键字不能缩写,且不能跨行。 ###...
在压缩包子文件的文件名"ms转sql语句.exe"中,我们可以推测这可能是一个用于将SQL Server语句转换为Oracle兼容格式的可执行程序。这样的工具通常会提供用户友好的界面,让用户导入SQL Server的数据库元数据,然后...
在这个场景中,我们可以利用批处理文件来简化Oracle数据库的操作,如删除用户、创建用户、创建表和触发器,以及执行其他SQL语句。 首先,我们需要了解如何在批处理文件中连接Oracle数据库。这通常通过Oracle的...
ORACLE数据库SQL语句编写优化
Oracle SQL编写规范是指在编写SQL语句时的一些基本原则和方法,旨在提高SQL语句的执行效率和可读性。以下是Oracle SQL编写规范的详细解释: 1. 尽量用索引,特别在从大量数据中返回小部分数据时 使用索引可以大大...
在Oracle中,基本的SQL语句包括SELECT、INSERT、UPDATE、DELETE,分别用于查询、插入、更新和删除数据。 2. **SELECT语句**:这是最常用的SQL语句,用于从表中检索数据。它支持各种运算符(如=, , >, <, BETWEEN等...
本资料集包含了Oracle数据库中常用SQL语句的大全,注释完整,非常适合初学者和有经验的开发者参考使用。 1. **数据查询(SELECT语句)**: - `SELECT * FROM table_name;`:查询表table_name中的所有列。 - `...
本资料将重点介绍Oracle SQL语句和语法,适合初学者入门学习。 1. **SQL基础** - **SELECT语句**:用于从数据库中检索数据,是最常用的SQL语句。可以指定列名、表名、条件等,例如`SELECT column1, column2 FROM ...
本资料“ORACLE数据库SQL语句编写优化总结”深入探讨了如何有效地编写和优化SQL语句,以达到最佳的查询效率。 1. **理解执行计划** - **执行计划**是Oracle解析SQL语句后确定的数据获取策略,了解执行计划可以帮助...
"oracle常用监控SQL语句集合"提供了这样的工具集,旨在帮助用户解决在编写Oracle SQL语句时遇到的问题。 1. **V$视图**: Oracle提供了大量的动态性能视图(如V$SESSION, V$INSTANCE, V$PROCESS等),它们提供了...
Oracle SQL语句是数据库管理与查询的核心工具,用于从Oracle数据库中检索、更新和操作数据。本教程将介绍SQL SELECT语句的基本概念和用法,帮助你理解和掌握如何在Oracle环境中执行SQL查询。 首先,SQL SELECT语句...
本文将深入探讨"ORACLE的SQL语句脚本",特别是涉及的PL/SQL语言,以及如何利用这些脚本来创建表、索引和视图。 首先,我们来理解SQL(Structured Query Language),它是用于管理和操作数据库的标准语言。在Oracle...
Oracle SQL是用于管理和操作Oracle数据库的强大工具,它包含多种用于数据查询、操作、定义和控制的语句。本文将深入探讨Oracle SQL中的常见查询和计算功能。 首先,SQL(Structured Query Language,结构化查询语言...