搜档网
当前位置:搜档网 › 存储过程及参数命名规范

存储过程及参数命名规范

存储过程及参数命名规范
存储过程及参数命名规范

存储过程及参数命名规范

一、存储过程命名规范

1.操作方式add(添加) mod(修改) del(删除) sel(查询) drag(托拽) copy(拷贝) lock(锁) chk(检查) cho(选择) rp(报表) ini(初始化) get(得到function专用)

2.结果类型Tree(树) Tab(表)

3.修饰语A(Tab专用修饰符all)

4.顺序bf(之前)

5.过程标识P (对外过程) F(方法) E(内部过程)

公有过程命名规则

公式:过程名=标识+对象条件+操作及修饰

过程标识_对象名(By条件)(结果类型)_主操作方式(修饰语) (顺序)(次操作方式) ()是可选对象

例:

树查询p_xxxxTree_Sel

树节点查表p_xxxxTab_Sel

主特征表查询P_xxxxByChr_Sel

明细特征表查询P_xxxxByDtlChr_Sel

查询所有p_xxxxx_SelA

独立选择框树P_xxxxTree_Cho

独立选择框树查表P_xxxxTab_Cho

独立选择框待选项查询p_xxxxByChr_Cho

独立选择框已选择项查询P_xxxxSeled_Cho

业务绑定选择框树P_xxxxforxxxTree_Cho

业务绑定选择框树查表P_xxxxforxxxTab_Cho

业务绑定选择框普通查询p_xxxxforxxxByChr_Cho

业务绑定已选择项查询P_xxxxforxxxSeled_Cho

除主页面查询外的其他条件查询P_xxxxByxxxx_Sel

新增P_xxxx_Add

修改P_xxxx_Mod

删除P_xxxx_Del

删除前检查P_xxxx_ChkBfDel

初始化P_xxxx_IniBfxxx

新增,修改,删除任选合一P_xxxx_Save

方法命名规则

F_getxxx //函数使用GET

内部过程命名规则

E_xxxxByxxx_Mod//内部方法

E _xxxx_ChkDel

E _xxxx_ChkMod

E _xxxxByxx_Mod

二、变量命名规范

1.摘要表引用变量命名尽量定义在pkg_bom_define中防止重复定义

Dt_xxxxx 如:dt_cnctype_jp

2.自定义常量命名尽量定义在pkg_bom_define中防止重复定义

Const_xxxx 如:const_Leaf

3.自定义变量尽量定义在包头防止各过程重复定义

Var_xxxx 如:var_curpage 字符型变量

Flt_xxxx 如:flt_monery浮点型变量

Num_xxxx 如:num_pagecount数字型变量

三、RECORD命名规范

Record命名:

1.普通对象:Xxxx_Rec 例:Type Role_Rec is Record

2.树对象:XxxxTree_Rec 例: Type RoleTree_Rec is Record

四、游标定义规范

1.对外返回游标普通游标c_xxx 树游标c_xxxTree

例:type c_role is ref cursor return role_Rec; --返回角色信息游标

2.内部使用动态游标cur_xxx

例:for cur_num in c_num1(i_role_class) loop

五、类型自定义对象及table对象命名规范

1.自定义对象命名对象名=模形名称_OBJ 例:CALENDAR_OBJ

2. 自定义TABLE命名

名称=模形名称_ OBJ_ARRAY 例:CALENDAR_OBJ_ARRAY

六、入参自定义类型名称规范

自定义table类型入参数命名入参集对象命名=i_模型名称_array例:i_hour_array

procedure Ssp_BfHourdelete_check(i_hour_array in HOUR_OBJ_ARRAY, --工时对象

o_Return_Code Out Varchar2, --返回代码

o_Error_Message Out Varchar2, --错误信息

o_Sqlerrm Out Varchar2 --错误sql信息

)is

七、JAVA方法命名规范

在dao接口中命名规范如下:

原则:1、过程中P开头的需要定义方法,其他则不需要

2、方法命名公式:方法名=操作及修饰+对象条件

参考:过程公式:过程名=标识+对象条件+操作及修饰

例:过程名:P_xxxx_ChkBfDel JA V A方法名:chkBfDelxxx

过程名:P_xxxxTree_Sel JA V A方法名:queryXxxxTree

过程名:P_xxxx_Mod JA V A方法名:modXxxx

过程名:P_xxx_SelA JA V A方法名:queryAllXxx

注意事项:1、如果过程结尾是Sel 或SelA JA V A方法为query 或queryAll

2、如果过程结尾是Cho JA V A方法为queryXxxxCho

其他则严格按原来的过程命名规则定义JA V A方法名称。

八、工作量评估

按上面要求进行修改,则要修改现有的520个过程以及所有的JA V A的service,dao以及control层。

九、建议过程修改方法

过程名修改将导致JA V A开始人员无法对应Procedure名与JA V A方法名的对应关系。

建议建立对应关系文件。

表格式如下:

SQLServer存储过程返回值总结.

SQLServer 存储过程返回值总结 1. 存储过程没有返回值的情况 (即存储过程语句中没有 return 之类的语句用方法 int count = ExecuteNonQuery(..执行存储过程其返回值只有两种情况 (1假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行 count 就是几 (2假如通过查询分析器执行该存储过程, 在显示栏中假如显示 ' 命令已成功完成。 ' 则 count = -1;在显示栏中假如有查询结果,则 count = -1 总结:A.ExecuteNonQuery(该方法只返回影响的行数,假如没有影响行数,则该方法的返回值只能是 -1,不会为 0。 B.不论 ExecuteNonQuery(方法是按照 CommandType.StoredProcedure 或者 CommandType.Text 执行, 其效果和 A 一样。 --------------------------------------------------------------------------------------------------------------------------------------------------- 2. 获得存储过程的返回值 --通过查询分析器获得 (1不带任何参数的存储过程 (存储过程语句中含有 return ---创建存储过程 CREATE PROCEDURE testReturn AS return 145 GO ---执行存储过程

DECLARE @RC int exec @RC=testReturn select @RC ---说明 查询结果为 145 (2带输入参数的存储过程 (存储过程语句中含有 return ---创建存储过程 create procedure sp_add_table1 @in_name varchar(100, @in_addr varchar(100, @in_tel varchar(100 as if(@in_name = '' or @in_name is null return 1 else begin insert into table1(name,addr,tel values(@in_name,@in_addr,@in_tel return 0

ORACLE存储过程编码规范

ORACLE存储过程编码规范 1.1变量规范 变量名、常量名、参数名、函数名、存储过程名、包名等所有对象全部用英文拼写,不允许用汉语拼音,多个单词间用下划线分割。 全局常量全部用大写,全局变量全部用小写,且全局变量尽量避免使用。 局部变量全部小写,使用“v_”开头,输入参数以“i_”开头,输出参数以“o_” 开头,输入输出参数用io_开头。 游标的定义:游标统一用前缀“cur_”命名 当变量代表列时,使用%TYPE属性,当变量实际上表示数据库表的某列数据时,为避免数据库结构修改对变量的影响,应统一使用%TYPE属性对变量命名 1.2显示游标规范 外部查询的多行数据返回使用游标进行处理,通过传递游标变量的形式返回数据到外部接口,由外部程序自行FETCH数据。 打开游标前,必须显式检查游标的%ISOPEN属性。 使用FETCH语句后,要立即检查%NOTFOUND属性,以便正常终止游标FETCH 循环。 无论PL/SQL程序是正常终止还是出错退出,都要关闭所有已打开的游标。在出错退出时,应该在其异常处理部分管理所有游标,这可以释放一部分的系统资源 1.3事务处理规范 在需要分割事务以使主事务的提交或者回滚独立于子事务的提交及回滚时,应使用自动提交事务。 所有的存储过程均统一在结束处统一COMMIT或者ROLLBACK。 1.4错误处理规范 凡是涉及到表操作(insert,update,select,delete)的sql语句,都必须进行错误捕捉,不能将错误带到后面的语句 从表中SELECT数据INTO到指定变量中的SQL语句,应严格区分NO_DATA_FOUND 和TOO_MANY_ROWS的错误,并将相应错误信息填入错误信息 ?NO_DA TA_FOUND 多数为查询条件问题导致无数据返回(用户级错误)

存储过程的典型例子

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。 QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。 要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。 下面我们来看一下存储过程的建立和使用方法。 一、创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是: QUOTE: CREATE PROC 存储过程名称 [参数列表(多个以“,”分隔)] AS SQL 语句 例: QUOTE: CREATE PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数 AS BEGIN -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数 SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId END 其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,

存储过程及参数命名规范

存储过程及参数命名规范 一、存储过程命名规范 1.操作方式add(添加) mod(修改) del(删除) sel(查询) drag(托拽) copy(拷贝) lock(锁) chk(检查) cho(选择) rp(报表) ini(初始化) get(得到function专用) 2.结果类型Tree(树) Tab(表) 3.修饰语A(Tab专用修饰符all) 4.顺序bf(之前) 5.过程标识P (对外过程) F(方法) E(内部过程) 公有过程命名规则 公式:过程名=标识+对象条件+操作及修饰 过程标识_对象名(By条件)(结果类型)_主操作方式(修饰语) (顺序)(次操作方式) ()是可选对象 例: 树查询p_xxxxTree_Sel 树节点查表p_xxxxTab_Sel 主特征表查询P_xxxxByChr_Sel 明细特征表查询P_xxxxByDtlChr_Sel 查询所有p_xxxxx_SelA 独立选择框树P_xxxxTree_Cho 独立选择框树查表P_xxxxTab_Cho 独立选择框待选项查询p_xxxxByChr_Cho 独立选择框已选择项查询P_xxxxSeled_Cho 业务绑定选择框树P_xxxxforxxxTree_Cho 业务绑定选择框树查表P_xxxxforxxxTab_Cho 业务绑定选择框普通查询p_xxxxforxxxByChr_Cho 业务绑定已选择项查询P_xxxxforxxxSeled_Cho 除主页面查询外的其他条件查询P_xxxxByxxxx_Sel 新增P_xxxx_Add 修改P_xxxx_Mod 删除P_xxxx_Del 删除前检查P_xxxx_ChkBfDel 初始化P_xxxx_IniBfxxx 新增,修改,删除任选合一P_xxxx_Save 方法命名规则

数据库设计和编码规范

数据库设计和编码规范 Version

目录

简介 读者对象 此文档说明书供开发部全体成员阅读。 目的 一个合理的数据库结构设计是保证系统性能的基础。一个好的规范让新手容易进入状态且少犯错,保持团队支持顺畅,系统长久使用后不至于紊乱,让管理者易于在众多对象中,获取所需或理清问题。 同时,定义标准程序也需要团队合作,讨论出大家愿意遵循的规范。随着时间演进,还需要逐步校订与修改规范,让团队运行更为顺畅。 数据库命名规范 团队开发与管理信息系统讲究默契,而制定服务器、数据库对象、变量等命名规则是建立默契的基本。 命名规则是让所有的数据库用户,如数据库管理员、程序设计人员和程序开发人员,可以直观地辨识对象用途。而命名规则大都约定俗成,可以依照公司文化、团队习惯修改并落实。 规范总体要求 1.避免使用系统产品本身的惯例,让用户混淆自定义对象和系统对象或关键词。 例如,存储过程不要以sp_或xp_开头,因为SQL SERVER的系统存储过程以 sp_开头,扩展存储过程以xp_开头。 2.不要使用空白符号、运算符号、中文字、关键词来命名对象。 3.名称不宜过于简略,要让对象的用途直观易懂,但也不宜过长,造成使用不方 便。 4.不用为数据表内字段名称加上数据类型的缩写。 5.名称中最好不要包括中划线。

6.禁止使用[拼音]+[英语]的方式来命名数据库对象或变量。 数据库对象命名规范 我们约定,数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。避免中文和保留关键字,做到简洁又有意义。前缀就是要求每种对象有固定的开头字符串,而开头字符串宜短且字数统一。可以讨论一下对各种对象的命名规范,通过后严格按照要求实施。例如:

oracle存储过程讲解及实例

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明PL/SQL体的开始。 行4: NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5: END关键词表明PL/SQL体的结束

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名 =param1; If (判断条件) then Select 列名into 变量2 from 表A where列名 =param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback;

End; 注意事项: 1,存储过程参数不带取值范围,in表示传入,out表示输出 类型可以使用任意Oracle中的合法类型。 2,变量带取值范围,后面接分号 3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4,用select 。。。into。。。给变量赋值 5,在代码中抛异常用 raise+异常名 CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 is_ym IN CHAR(6) ,

SQL一个存储过程调用另一个存储过程 获取返回值问题

2008-12-16 21:41 第一种方法: 使用output参数 USE AdventureWorks; GO IF OBJECT_ID ( 'https://www.sodocs.net/doc/1f8387688.html,p_GetList', 'P' ) IS NOT NULL DROP PROCEDURE https://www.sodocs.net/doc/1f8387688.html,p_GetList; GO CREATE PROCEDURE https://www.sodocs.net/doc/1f8387688.html,p_GetList @product varchar(40) , @maxprice money , @compareprice money OUTPUT , @listprice money OUT AS SELECT https://www.sodocs.net/doc/1f8387688.html, AS Product, p.ListPrice AS'List Price' FROM Production.Product p JOIN Production.ProductSubcategory s ON p.ProductSubcategoryID = s.ProductSubcategoryID WHERE https://www.sodocs.net/doc/1f8387688.html, LIKE@product AND p.ListPrice <@maxprice; -- Populate the output variable @listprice. SET@listprice= (SELECT MAX(p.ListPrice) FROM Production.Product p JOIN Production.ProductSubcategory s ON p.ProductSubcategoryID = s.ProductSubcategoryID WHERE https://www.sodocs.net/doc/1f8387688.html, LIKE@product AND p.ListPrice <@maxprice); -- Populate the output variable @compareprice. SET@compareprice=@maxprice; GO 另一个存储过程调用的时候: Create Proc Test as DECLARE@compareprice money, @cost money EXECUTE https://www.sodocs.net/doc/1f8387688.html,p_GetList '%Bikes%', 700, @compareprice OUT, @cost OUTPUT IF@cost<=@compareprice BEGIN PRINT'These products can be purchased for less than $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.' END ELSE PRINT'The prices for all products in this category exceed $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.'

代码规范率

竭诚为您提供优质文档/双击可除 代码规范率 篇一:数据库设计编码规范 sqlserve数据库设计规范 一、数据库命名规范: 对象前缀命名:前缀命名一般用小写 表的前缀:业务模块组名前缀 数据列的前缀:一般采用列的数据类型做前缀 存储过程前缀:udp,系统存储过程(sp) 自定义函数前缀:udf(userdefinefunction) 视图前缀:udv(userdefineView)表示用户自定义视图自定义规则前缀:udr(userdefinerule)用户自定义规则 自定义约束前缀:uck(userchecker)用户自定义约束 索引前缀:idx(index)表示索引 主键前缀:pk(primarykeys)表示主键 数据列的前缀示例: 二、数据库设计规范: 1、每个表中都可以考虑添加的的几个有用的字段

Recoredid,记录唯一编号,不建议采用业务数据作为记录的唯一编号 creationdate,在sqlserver下默认为getdate() Recordcreator,在sqlserver下默认为notnulldeFaultuseR RecordVersion,记录的版本标记;有助于准确说明记录中出现null数据或者丢失数据的原因 2、数据类型: 字符类型 一般不建议采用char而采用varchar数据类型,除非当这列数据的长度特别固定时可以考虑用char。 数值类型 如果表示金额货币建议用money型数据, 如果表示科学记数建议用numeric数据类型 记录标识 一般采用int类型标识唯一一行记录。 自增or非自增 3、索引: 所有的表都应该有一个主键索引,这对提高数据库的性能很有帮助 根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的

编码规范考试题答案

一、单选题 1. 如下关于集合类的描述错误的是B A. 含有集合意义的属性命名,尽量包含其复数的意义 B. 集合中的数据不需要释放,垃圾回收器会自动回收 C. 集合必须指定模板类型 D. 使用集合类时要设置初始化容量 2. 关于线程以下说法错误的有B A. 新起一个线程,都要使用(“…”)设置线程名 B. 在或更新的版本中,若字符串拼接发生在单线程环境,使用StringBuffer C. 对多线程访问的变量、方法,必须加锁保护,避免出现多线程并发访问引起的问题 D. 线程使用时,要在代码框架中使用线程池,避免创建不可复用的线程;禁止在循环中创建新线程,否则会引起JVM资源耗尽 3. 下面哪个是推荐使用的对称密码算法B A. DES B. AES C. SHA D. RSA 4. 以下说法正确的有C A. 程序中的一些状态多直接用数字表示,如函数执行成功return 1 B. 对于表示函数执行错误,多用约定的错误码来标识 C. 用有意义的静态变量或者枚举来代替数字型的程序状态,如函数执行成功return SUCCESS D. 程序中的魔鬼数字并不可怕,需要所有开发人员努力理解这些数字的含义 5. 下列错误使用异常的做法是D A. 在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常 B. 一个方法不应抛出太多类型的异常。throws/exception子句标明的异常最好不要超过三个 C. 异常捕获尽量不要直接 catch (Exception ex),应该把异常细分处理 D. 程序内抛出的异常本身就可说明异常的类型、抛出条件,可不填写详细的描述信息。捕

存储过程实例精选

整理者为我 实例1:只返回单一记录集的存储过程。 银行存款表(bankMoney)的内容如下 要求1:查询表bankMoney的内容的存储过程 create procedure sp_query_bankMoney as select * from bankMoney go exec sp_query_bankMoney 注* 在使用过程中只需要把中的SQL语句替换为存储过程名,就可以了很方便吧! 实例2(向存储过程中传递参数): 加入一笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总金额。 Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output with encryption ---------加密 as insert bankMoney (id,userID,sex,Money)

Values(@param1,@param2,@param3, @param4) select @param5=sum(Money) from bankMoney where userID='Zhangsan' go 在SQL Server查询分析器中执行该存储过程的方法是: declare @total_price int exec insert_bank '004','Zhangsan','男',100,@total_price output print '总余额为'+convert(varchar,@total_price) go 在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容): 1.以Return传回整数 2.以output格式传回参数 3.Recordset 传回值的区别: output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。 实例3:使用带有复杂 SELECT 语句的简单过程 下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info_all' AND type = 'P') DROP PROCEDURE au_info_all GO

SQL编码规范

车联网技术SQL编码规范 1、严谨使用标量子查询(分页可以使用) select (select ... from a where a.id=b.id) from b 2、不要使用INSERT INTO table VALUE(?,?,?,?,?)格式,要指出 具体要赋值的字段,INSERT的效率会有提高。 3、SELECT与FROM语句之间只定义返回的字段名,除非返回所 有的字段,尽量不要使用* ,字段提取要按照“需多少、提多 少”的原则(因为大批量数据的抽取会影响SQL缓存的效率)4、避免使用COUNT(*),因为COUNT(*)会对全字段做聚集,建 议使用COUNT (0)或COUNT(1)这样的查询语句,有主键ID,尽量使用count(id) 5、使用OR 会引起全表扫描,比较影响查询效率,尽可能少用或 不用,实在不行可以用UNION ALL代替。NULL的检索要回避 一下。 6、使用DISTINCT是为了保证在结果集中不出现重复值,但是 DISTINCT会产生一张工作表,并进行排序来删除重复记录, 这会大大增加查询和I/O的操作次数。因此应当避免使用 DISTINCT关键字 7、负逻辑如!=、<>、not in等,都会导致全表扫描来完成查询。 当表较大时,会严重影响系统性能,可以用别的操作来代替。 8、join 与on 必须严格匹配,不允许出现没有on的join 9、Where 子句中的连接顺序:数据库采用自下而上的顺序解析

where子句,根据这个原理,表之间的连接必须写在其他where 条件之前,那些可以过滤掉大量记录的条件必须写在where子句的末尾。如: 低效:select * from emp e where sal>5000 and job = ‘manager’ and 25< (select count (*)from emp where mgr=e.empno); 高效:select * from emp e where 25<(select count(*) from emp where mgr=e.empno) and sal>5000 and job=’manager’; 10、在使用UNION或UNION ALL 的前后的两个SQL需要加( )。 11、避免使用IN和NOT IN ,使用EXIST和NOT EXIST代替。 12、将计算从等号左边移到右边,例如:把a*2>4改为a>4/2;把TO_CHAR(zip) = ‘94002’ 改为zip = TO_NUMBER('94002')。 13、不要使用NOT,如Goods_no != 2,要改为: where Goods_no>2 or Goods_no<2 14、不要使用is null , 如WHERE DEPT_CODE IS NOT NULL 要改为: WHERE DEPT_CODE >=0; 15、尽量把循环的操作封装到SQL写的存储过程里,因为存储过程都在服务端执行,所以没有数据往返的消耗。有机会,将一些查询封装到函数里,而在普通SQL里使用这些函数,同样是很有效的优化。 16、索引列上>= 代替> 如: 高效:select * from emp where deptno >=4

(完整版)SQLSERVER存储过程大总结

SQLSERVER存储过程使用说明书 引言 首先介绍一下什么是存储过程:存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 请大家先看一个小例子: create proc query_book as select * from book go --调用存储过程 exec query_book 请大家来了解一下存储过程的语法。 Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] 一、参数简介 1、procedure_name 新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。 要创建局部临时过程,可以在 procedure_name 前面加一个编号 符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两

个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。 2、;number 是可选的整数,用来对同名的过程分组,以便用一条 Drop PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。Drop PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应 在 procedure_name 前后使用适当的定界符。 3、@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2100 个参数。 使用@符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。 4、data_type 参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。 说明:对于可以是cursor 数据类型的输出参数,没有最大数目的限制。 5、VARYING 指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 6、default 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。 7、OUTPUT

存储过程写法

获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值 例:向Order表插入一条记录,返回其标识 CREATE PROCEDURE[dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEGIN SET NOCOUNT ON; BEGIN INSERT INTO[Order](o_buyerid ) VALUES (@o_buyerid ) SET@o_id=@@IDENTITY END END 存储过程中获得方法: DECLARE@o_buyerid int DECLARE@o_id bigint EXEC[nb_order_insert]@o_buyerid ,o_id bigint 2.RETURN过程返回值 CREATE PROCEDURE[dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEGIN SET NOCOUNT ON; IF(EXISTS(SELECT*FROM[Shop]WHERE[s_id]=@o_shopid)) BEGIN INSERT INTO[Order](o_buyerid ) VALUES (@o_buyerid ) SET@o_id=@@IDENTITY RETURN1—插入成功返回1 END ELSE RETURN0—插入失败返回0 END

存储过程中的获取方法 DECLARE@o_buyerid int DECLARE@o_id bigint DECLARE@result bit EXEC@result=[nb_order_insert]@o_buyerid ,o_id bigint 3.SELECT 数据集返回值 CREATE PROCEDURE[dbo].[nb_order_select]( @o_id int ) AS BEGIN SET NOCOUNT ON; SELECT o_id,o_buyerid FROM[Order] WHERE o_id =@o_id GO 存储过程中的获取方法 (1)、使用临时表的方法 CREATE TABLE[dbo].[Temp]( [o_id][bigint]IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, [o_buyerid][int]NOT NULL ) INSERT[Temp]EXEC[nb_order_select]@o_id –这时Temp就是EXEC执行SELECT 后的结果集 SELECT*FROM[Temp] DROP[Temp]—删除临时表 (2)、速度不怎么样.(不推荐) SELECT*from openrowset(’provider_name','Trusted_Connection=yes’,'exec nb _order_select’) 1.获取Return返回值 程序代码 //存储过程 //Create PROCEDURE MYSQL // @a int,

(完整版)阿里巴巴编码规范(Java)题库

多选 1.如何处理单元测试产生的数据,下列哪些说法是正确的?ABC A .测试数据入库时加特殊前缀标识。 B .测试数据使用独立的测试库。 C .自动回滚单元测试产生的脏数据。 D .无须区别,统一在业务代码中进行判断和识别。 多选 2.关于并发处理,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 B .同步处理时,能锁部分代码区块的情况下不要锁整个方法;高并发时,同步调用应该考虑到性能损耗。 C .创建线程或线程池时,推荐给线程指定一个有意义的名称,方便出错时回溯。 D .推荐使用Executors.newFixedThreadPool(int x)生成指定大小的线程池。(线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式) 多选 3.下列哪些说法符合《阿里巴巴Java开发手册》:ACD A .对于“明确停止使用的代码和配置”,如方法、变量、类、配置文件、动态配置属性等要坚决从程序中清理出去,避免造成过多垃圾。 B .永久弃用的代码段注释掉即可,即不用加任何注释。 C .对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的逻辑。 多选 4.关于分页查询,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .分页查询,当统计的count为0时,应该直接返回,不要再执行分页查询语句。 B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑,提高效率。

C++调用SQL存储过程实例

c/c++调用mysql存储过程 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。 在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处理逻辑与数据库处理逻辑的分离。下面就介绍c 语言调用存储过程的简单的方法。 1、首先创建一张表 用于存放用户信息 Create table student( id int auto_increment, name varchar(20), age tinyint, remark varchar(50), primary key(id) ); 2、插入几条信息 Insert into student values(1,"zhouys",90, ""); commit; 3、查看用户信息 mysql> select * from student;

+------+-----------+------+----------+ | id | name | age | remark | +------+-----------+------+----------+ | 1 | zhouys | 90 | | +------+-----------+------+-----------+ 1 row in set (0.00 sec) mysql> 4、创建存储过程 如下: delimiter // create procedure querystudent( in in_id int , #0-字符id 1-数字id # out out_ret int, #返回结果 out out_name varchar(20), #名字 out out_age int #年龄) label_a:begin declare v_name varchar(20) ; declare v_age tinyint ; #参数判断 if (in_id<=0) then set out_ret=-1; #id error

SQL Server存储过程和参数示例

一些用在SQL 2000的企业管理GUI中,并且不打算用于其他的流程。微软已预计将其中的一些存储过程从未来的SQL Server版本中删除(或已经删除了)。虽然这些存储过程可能很有用并为你节省了很多时间,但是他们可以在任何时候改变他们的函数或简单的删除掉。 下面的图表显示了当许多存储过程从一个Microsoft SQL Server版本移入另一个版本时,引入了新的存储过程,而原来的一些则从安装包里删除了。大多数的存储过程,如果不是所有的,要求用户是系统管理员服务器角色以便执行这些存储过程。和文件系统交互的存储过程还要求执行存储过程的用户(还有SQL Server的服务帐户)具有访问文件/文件夹的权限。 sp_executeresultset 微软在SQL Server 2005中删除了这个名为sp_executeresultset的便利小程序。它允许你在空闲时通过使用SELECT查询产生动态SQL代码。然后,作为结果的SQL命令将会在数据库上执行。它允许你创建单独的一行代码,这行代码可以在单步中查询到你的数据库里

的每一个表的记录数目(就像例子中所显示的)。这是一个未公开的存储过程,而且无法知道它为什么被删除了。但是,唉,这个便利的有用存储过程已经没有了。 exec sp_execresultset 'SELECT ''SELECT '''''' + name + '''''', count(*) FROM '' + name from sysobjects where xtype = ''U''' sp_MSforeachdb / sp_MSforeachtable sp_MSforeachdb / sp_MSforeachtable 两个存储过程,sp_MSforeachdb和sp_MSforeachtable封装了一个指针。它们允许你对你的SQL Server上的每一个数据库和当前数据库中的每一个表分别执行T-SQL代码。然而你不能在SQL2000和之前的版本中在一个sp_MSforeachdb命令中使用sp_MSforeachtable命令。在这些存储过程中使用的指针名称是一样的(hCForEach),因此在每一次执行sp_MSforeachtable时会返回一个错误说该指针名称已经在使用。在SQL Server 2005中,微软解决了这一问题。为了执行“下一个”命令,你必须告诉其中的一个存储过程它将使用一个不同的替换字符而不是默认的问号。我改变了数据库命令中的这个替换字符,因为它更为简单。 打印当前数据库中的每一个表的名称 exec sp_MSforeachtable 'print ''?''' 打印当前服务器的每一个数据库 exec sp_MSforeachdb 'print ''?''' 打印当前数据库的每一个表 exec sp_MSforeachdb 'use [@] exec sp_MSforeachtable ''print ''''@.?''''''', '@' sp_readerrorlog / xp_readerrorlog 存储过程sp_readerrorlog实际上有两种形式。每一项的工作内容一样;一个是另一个的简单封装。封装的存储过程是sp_readerrorlog,它调用xp_readerrorlog。这两个都有四个输入参数,但是只有前两个对我们有用。第一个参数设定你希望看到的文件编号。第二

用JDBC操作Oracle的存储过程返回值.

用JDBC操作Oracle的存储过程返回值 Oracle的存储过程可以返回任何类型,包括一个ResultSet,JDBC自带的CallableStatement可以提供操作这些返回值得借口,其中我们可以通过registerOutParameter来注册需要返回的类型。CallableStatement是PrepareStatement的一个子类,但提供了返回和注册Out类型参数的功能。我们看一下例子,在Oracle里面我们定义了一个包如下: create or replace package GP_TESTP is type my_dCursor is ref cursor; procedure GP_Test(m_cursor2 OUT my_dCursor; end GP_TESTP; create or replace package body GP_TESTP is procedure GP_Test(m_cursor2 OUT my_dCursor is begin open m_cursor2 for select bom.material_no,bom.product_no from gp2_bom bom where bom.year=2006 ; end GP_Test; end GP_TESTP; 在JDBC里面我们可以通过如下的接口来得到返回的动态游标的内容 Global.start(; //初始化连接池 ConnectionWrapper wrapper=ConnectionPoolFactory.getPoolInstance(.borrowConnection(;//从连接池里面返回连接 Connection conn=wrapper.getConnection(; try { String callSql="{call GP_TESTP.GP_Test(?}"; CallableStatement cs = null; ResultSet rs=null; cs = conn.prepareCall(callSql; cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR; cs.execute(; rs = (ResultSetcs.getObject(2; while(rs.next({ //String s=rs.get(""; String component=rs.getString(2; String productNo=rs.getString(4; System.out.println("component="+component+"-------productNo="+productNo; } } catch (SQLException e { // TODO Auto-generated catch block e.printStackTrace(; } 注意兰颜色的代码是注册动态游标和返回结果集的关键代码。 ======================================= 2008年07月06日星期日 07:41 P.M.一:无返回值的存储过程存储过程为: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2 AS BEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME VALUES (PARA1, PARA2; END TESTA; 然后呢,在java里调用时就用下面的代码: package com.hyq.src; import java.sql.*; import java.sql.ResultSet; public class TestProcedureOne { public TestProcedureOne( { } public static void main(String[] args { String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq "; Statement stmt = null;

相关主题