存储过程

ORACLE 存储过程实战

放肆的年华 提交于 2020-02-03 03:27:48
--定义获取部门ID的函数 create or replace function Get_Dept_Id(in_Dept_name in varchar2) return integer as v_dept_id integer := 1; begin sELECT dept_id into v_dept_id FROM dict_depts WHERE DEPT_NAME = in_Dept_name; return v_dept_id; exception when no_data_found then v_dept_id := 1; return v_dept_id; when others then v_dept_id := 1200; --糯扎渡项目部将返回2条记录,在此处捕获并重新赋值 return v_dept_id; end Get_Dept_Id; --定义获取单位ID的函数 create or replace function Get_Unit_Id(in_unit_name in varchar2) return integer as v_unit_id integer := 1; begin SELECT id into v_unit_id FROM ins_unit_dict WHERE NAME = in_unit_name; return v_unit

存储过程来更新表的记录

只愿长相守 提交于 2020-02-03 03:23:13
CREATE OR REPLACE procedure DWUSER.update_DW_Amount as begin execute immediate 'truncate table DW_AMOUNT'; insert into DW_AMOUNT select login_date, login_amount, login_fail_amount, register_amount, login_fail_amount/login_amount as LOGIN_FAIL_RATE FROM (select login_date, count(user_id) login_amount,count(case when result='Fail' then result end ) login_fail_amount from ( select trunc(occur_date) login_date,user_id,result from T_SODW_ACTIVITY_LOG WHERE occur_date > to_date('20110623','yyyymmdd') and type = 'SODW_ACT_018_20' group by trunc(occur_date),user_id,result ) group by login_date ) LOGIN

编程实现SQL Server备份和还原

北城余情 提交于 2020-02-01 03:32:39
注意,下面备份还原都是用存储过程实现! if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_backupdb] GO /*--备份数据库的通用存储过程 --邹建 2003.10--*/ /*--调用示例 --备份当前数据库 exec p_backupdb @bkpath='c:\',@bkfname='\DBNAME\_\DATE\_db.bak' 存储过程实现备份和还原数据库: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_backupdb] GO /*--备份数据库的通用存储过程 --邹建 2003.10--*/ /*--调用示例 --备份当前数据库 exec p_backupdb @bkpath='c:\',@bkfname='\DBNAME\_\DATE\_db.bak'

一句set nocount on解决问题

我怕爱的太早我们不能终老 提交于 2020-02-01 02:00:05
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息 语法: SET NOCOUNT { ON | OFF } 默认情况下为 OFF 当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。 当 SET NOCOUNT 为 OFF 时,返回计数。 即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。 当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。 如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。 ----- 记得以前遇到过, 存储过程中因为没有set nocount on,导致程序没有错误提示,但就是显示不出数据,但是在查询分析器中运行却没有问题 ,曾经以为是程序的问题,在邹老大的提示下,才顺利过关。由上面的注释可以看出

T-SQL 中 SET NOCOUNT ON 的含义

寵の児 提交于 2020-02-01 01:58:53
每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用程序中是没有用的,这些信息是存储过程中的每个语句的DONE_IN_PROC 信息。 我们可以利用SET NOCOUNT 来控制这些信息,以达到提高程序性能的目的。 MSDN中帮助如下: SET NOCOUNT 使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。 语法 SET NOCOUNT { ON | OFF } 注释 当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。 即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。 当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、 UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。

SQL SET NOCOUNT ON的含义和作用

瘦欲@ 提交于 2020-02-01 01:57:30
SET NOCOUNT 使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。 语法 SET NOCOUNT { ON | OFF } 注释 当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。 即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。 当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。 如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。 权限 SET NOCOUNT 权限默认授予所有用户。 结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。 来源: https://www

PLSQL——06、存储过程

扶醉桌前 提交于 2020-02-01 00:52:18
练习 1:导入型形式参数(in类型) CREATE OR REPLACE PROCEDURE raise_salary (p_id IN emp.empno%TYPE) IS --变量声明 BEGIN UPDATE emp SET sal = sal * 1.1 WHERE empno = p_id; END raise_salary; / 存储过程的调用: --方法一: EXECUTE raise_salary (7839); --方法二: declare v_empno emp.empno%type :=&p_empno; begin RAISE_SALARY(v_empno); end; / SQL>SHOW ERROR --查看编译错误; 练习 2:导出型形式参数(out类型) CREATE OR REPLACE PROCEDURE query_emp (p_id IN emp.empno%TYPE, p_name OUT emp.ename%TYPE, p_salary OUT emp.sal%TYPE, p_comm OUT emp.comm%TYPE) IS BEGIN SELECT ename, sal, comm INTO p_name, p_salary, p_comm FROM emp WHERE empno = p_id; END query_emp; /

存储过程

谁说胖子不能爱 提交于 2020-01-30 10:25:11
是SQL语句和控制语句的预编译集合,保存在数据库里。可由应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其他强大的编程功能。     优点:         1.模块化设计       2.执行速度快,效率高       3.减少网络流量       4.具有良好的安全性   分类:      系统存储过程 :以'sp_'开头,存放在resource数据库中,         sp_databases    列出服务器上所有的数据库信息,包括数据库名称和数据库大小         sp_helpdb 报告有关指定数据库或所有数据库信息         sp_ renamedb 更改数据库名称         sp_ tables 返回当前环境下可查询的表或视图的信息         sp_ columns 返回某个表或视图的列信息,包括列的数据类型和长度         sp_ help 返回某个数据库对象的信息         sp_ helpconstraint  查看某个表的约束         sp_ helpindex  查看某个表的索引         sp_ stored_procedures  显示存储过程的列表         sp_password  添加或修改登录账户的密码         sp_helptext 显示默认值,未加密过的存储过程

ADO.NET数据访问技术入门

巧了我就是萌 提交于 2020-01-30 10:14:09
ADO.NET概览 在应用程序开发过程中,大多数时候都需要与数据库进行交互。在 .NET 问世之前,常用的有 ODBC 、 OLEDB 和 ADO 等数据访问技术。而在 .NET 下, Microsoft 推荐使用 ADO.NET 这种全新的数据处理方式。 ADO.NET 包括两个核心组件:数据提供程序和数据集。数据提供程序用于连接到数据源,支持数据访问和处理。数据集支持数据以关联的方式,在断开连接的情况下独立的缓存数据,根据需要更新数据源。 每个数据源提供程序都有各自的命名空间,并且都把各自所连接的数据源类型作为其前缀。如 System.Data.SqlClient 命名空间是 SQL Server 的 .NET Framework 数据提供程序; System.Data.OracleClient 命名空间是用于 Oracle 的 .NET Framework 数据提供程序。 .NET 下每个数据提供程序都具备以下两项相同的核心功能: 通过与数据源的活动链接来访问数据。 与断开连接的数据集和数据表进行数据交换。 System.Data.SqlClient命名空间概览 .NET 下访问 SQL Server 常用的有 System.Data.SqlClient 和 System.Data.OleDb 这两个命名空间,但前者相对更高效,本实例也是基于 System.Data