存储过程书写范例
gp存储过程写法
gp存储过程写法全文共四篇示例,供读者参考第一篇示例:存储过程(Stored Procedure)是一种在数据库中存储和执行的预编译的SQL代码,可以用于实现特定的功能或业务逻辑。
它们可以提高数据库的性能,减少网络流量,同时也可以简化客户端应用程序的开发过程。
在GP数据库中,存储过程是非常重要的,可以帮助我们更好地管理和维护数据库。
本文将介绍GP存储过程的写法,以及一些注意事项。
一、GP存储过程的语法在GP数据库中,我们可以使用T-SQL(Transact-SQL)语言编写存储过程。
一个基本的存储过程通常包含以下几个部分:1. 存储过程的名称:用于唯一标识存储过程的名称。
2. 参数列表:存储过程可以接受参数,可以是输入参数、输出参数或输入输出参数。
3. 存储过程体:包含实际的SQL代码,用于实现具体的功能。
4. 返回值:存储过程可以返回一个或多个值。
下面是一个简单的GP存储过程的示例:```sqlCREATE PROCEDURE usp_GetCustomerInfo@CustomerID INTASBEGINSELECT * FROM Customers WHERE CustomerID =@CustomerIDEND```以上示例是一个名为usp_GetCustomerInfo的存储过程,接受一个参数@CustomerID,然后根据该参数查询Customers表中的数据,并返回结果。
二、在GP中创建存储过程在GP中创建存储过程非常简单,可以通过SQL Server Management Studio或者GP提供的工具来实现。
下面是创建一个存储过程的简单步骤:1. 打开SQL Server Management Studio,连接到GP数据库。
2. 在“查询”窗口中输入存储过程的代码。
3. 按下F5键或者点击“执行”按钮,执行SQL语句,创建存储过程。
我们也可以在GP中使用存储过程向数据库中插入、更新、删除数据,或者执行复杂的逻辑操作。
存储过程案例
存储过程案例
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,用户通过调用存储过程来执行这个程序。
以下是一个简单的存储过程案例:
案例:创建存储过程,根据用户输入的姓名查询员工信息
1. 数据库表结构
假设有一个名为`employees`的表,结构如下:
```sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
department VARCHAR(50)
);
```
2. 创建存储过程
```sql
DELIMITER //
CREATE PROCEDURE GetEmployeeInfo(IN empName VARCHAR(50)) BEGIN
SELECT FROM employees WHERE name = empName;
END //
DELIMITER ;
```
3. 调用存储过程
调用上述存储过程,查询名为"John"的员工信息:
```sql
CALL GetEmployeeInfo('John');
```
4. 结果
如果存在名为"John"的员工,则返回该员工的信息;否则返回空结果。
这是一个简单的存储过程示例。
在实际应用中,存储过程可以更复杂,可以包含条件、循环、多个表的联接等操作。
使用存储过程的好处是提高性能、减少网络流量、提高安全性等。
goldendb 存储过程写法
goldendb 存储过程写法English Answer:Goldendb is a high-performance distributed databasethat supports stored procedures. Stored procedures are a set of SQL statements that are stored in the database and can be executed as a single unit. They can be used to perform complex operations, such as data manipulation, data retrieval, and data validation.Creating a Stored Procedure.To create a stored procedure in Goldendb, you can use the following syntax:sql.CREATE PROCEDURE [schema_name].[procedure_name]AS.BEGIN.-SQL statements.END;The `schema_name` is the name of the schema in which the stored procedure will be created. The `procedure_name` is the name of the stored procedure. The `SQL statements` are the SQL statements that will be executed when the stored procedure is called.Calling a Stored Procedure.To call a stored procedure, you can use the following syntax:sql.EXEC [schema_name].[procedure_name];The `schema_name` is the name of the schema in which the stored procedure is stored. The `procedure_name` is the name of the stored procedure.Example.The following is an example of a stored procedure that can be used to get the current time:sql.CREATE PROCEDURE [dbo].[GetTime]AS.BEGIN.SELECT GETDATE();END;To call this stored procedure, you can use thefollowing syntax:sql.EXEC [dbo].[GetTime];Advantages of Stored Procedures.Stored procedures offer a number of advantages, including:Improved performance: Stored procedures can be compiled and cached, which can improve performance.Increased security: Stored procedures can be used to restrict access to data and operations.Reduced code duplication: Stored procedures can be used to reduce code duplication by encapsulating common tasks.Improved maintainability: Stored procedures can beeasier to maintain than SQL statements that are spread across multiple locations.中文回答:Goldendb 存储过程。
存储过程基本语法
存储过程1.存储过程例子 (1)2.SQL Server 字符串函数 (4)3. SQL Server 存储过程基本语法 (9)1.存储过程例子以下通过表Student 来了解存储过程,因为是要了解存储过程的简单用法,所以所有例子均很简单。
无参数存储过程:选出Student表中的所有信息,有参数存储过程:全局变量全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
选出指定姓名的学生信息:上面是在外部给变量赋值,也可以在内部直接给变量设置默认值也可以把变量的内容输出,使用output以上是全局变量,下面来了解局部变量局部变量也称为内部变量。
局部变量是在函数内作定义说明的。
其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名数据类型}局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}局部变量的显示:select @变量名那如果是要把局部变量的数据显示出来怎么办呢?2.SQL Server 字符串函数以下所有例子均Studnet表为例:计算字符串长度len()用来计算字符串的长度字符串转换为大、小写lower() 用来将一个字符串转换为小写,upper() 用来将一个字符串转换为大写截去字符串左、右侧空格ltrim() 用来将一个字符串左侧的空格去掉,rtrim()用来将一个字符串右侧的空格去掉返回由重复的空格组成的字符串space(integer_expression)integer_expression 指示空格个数的正整数。
如果 integer_expression 为负,则返回空字符串。
取子字符串substring(string,start_position,length) 可以从任意位置取任意长度的子字符串,left(string,length) 从左侧开始取子字符串right(string,length)从右侧开始取子字符串字符串替换replace(string,要被替换的字符串,替换的字符串)返回字符串值的逆向值reverse(string_expression)删除指定长度的字符,并在指定的起点处插入另一组字符stuff(character_expression , start , length ,character_expression)start 一个整数值,指定删除和插入的开始位置。
存储过程编写规范
存储过程编写规范
1、存储过程的语法(省略)
2、存储过程规范:
a)编写一个存储过程,详细说明存储过程创建人、创建时间、用途、注意点等。
3、注意点:
a)写法分为两种:
i.第一种:存储过程中直接编写sql语句,好处:编译时会自动验证sql 语法正
确性。
缺点:编译后若表存在时,存储过程运行不了。
如下图所示:
ii.第二种:存储过程编写sql 语句时,用引号引起来,好处:任何情况下都可以运行,但不会自动验证语法。
如下图所示:
b)存储过程中,若参数有月份(v_month)或天(v_day),则一般跑数据原则:先把
当月/当天数据清空,再重新跑数据,如下图所示:。
oracle 存储过程优秀例子
oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储和执行SQL语句的过程。
它可以接受参数并返回结果,用于实现复杂的业务逻辑和数据操作。
下面是10个优秀的Oracle存储过程示例,展示了不同方面的功能和用法。
1. 创建表并插入数据```sqlCREATE PROCEDURE create_employee_table ASBEGINEXECUTE IMMEDIATE 'CREATE TABLE employee (id NUMBER, name VARCHAR2(100))';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (1, ''John Doe'')';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (2, ''Jane Smith'')';END;```这个存储过程创建了一个名为employee的表,并插入了两条数据。
2. 更新员工姓名```sqlCREATE PROCEDURE update_employee_name(p_id NUMBER,p_name VARCHAR2) ASBEGINUPDATE employee SET name = p_name WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID和新的姓名作为参数,然后更新对应员工的姓名。
3. 删除员工记录```sqlCREATE PROCEDURE delete_employee(p_id NUMBER) AS BEGINDELETE FROM employee WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID作为参数,然后删除对应的员工记录。
数据库存储过程写法
数据库存储过程是一组预定义的数据库操作步骤,它们被封装在数据库中以供重复使用。
存储过程可以接受参数、执行特定的操作,并返回结果,以下是一个通用的存储过程写法示例:CREATE PROCEDURE procedure_name(parameter1 data_type, parameter2 data_type, ...)ASBEGIN--存储过程的主体部分,包括一系列的SQL语句和逻辑操作--示例1:插入数据INSERT INTO table_name (column1, column2, ...)VALUES (parameter1, parameter2, ...);--示例2:更新数据UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;--示例3:查询数据SELECT column1, column2, ...FROM table_nameWHERE condition;--示例4:删除数据DELETE FROM table_nameWHERE condition;--其他的SQL语句和逻辑操作...END;上述示例中,procedure_name 是存储过程的名称,parameter1、parameter2 等是存储过程的参数,data_type 是参数的数据类型。
在存储过程的主体部分,可以编写一系列的SQL语句和逻辑操作来执行特定的数据库操作,例如插入数据、更新数据、查询数据和删除数据等。
存储过程可以根据实际需求来定义参数和操作,可以接受输入参数、输出参数,也可以有条件判断、循环和异常处理等。
具体的存储过程语法和特性可能会因数据库系统而异,因此在实际编写存储过程时,需要参考相应的数据库系统的文档和规范来编写和调试存储过程。
存储过程几个小例子
存储过程⼏个⼩例⼦例1:create proc proc_stu@sname varchar(20),@pwd varchar(20)asselect * from ren where andgo查看结果:proc_stu 'admin','admin'例2:下⾯的存储过程实现⽤户验证的功能,如果不成功,返回0,成功则返回1.CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT ASIF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)SELECT @LEGAL = 1ELSESELECT @LEGAL = 0在程序中调⽤该存储过程,并根据@LEGAL参数的值判断⽤户是否合法。
例3:⼀个⾼效的数据分页的存储过程可以轻松应付百万数据CREATE PROCEDURE pageTest --⽤于翻页的测试--需要把排序字段放在第⼀列(@FirstID nvarchar(20)=null, --当前页⾯⾥的第⼀条记录的排序字段的值@LastID nvarchar(20)=null, --当前页⾯⾥的最后⼀条记录的排序字段的值@isNext bit=null, --true 1 :下⼀页;false 0:上⼀页@allCount int output, --返回总记录数@pageSize int output, --返回⼀页的记录数@CurPage int --页号(第⼏页)0:第⼀页;-1最后⼀页。
)ASif @CurPage=0--表⽰第⼀页begin--统计总记录数select @allCount=count(ProductId) from Product_testset @pageSize=10--返回第⼀页的数据select top 10ProductId,ProductName,Introductionfrom Product_test order by ProductIdendelse if @CurPage=-1--表⽰最后⼀页select * from(select top 10 ProductId,ProductName,Introductionfrom Product_test order by ProductId desc ) as aaorder by ProductIdelsebeginif @isNext=1--翻到下⼀页select top 10 ProductId,ProductName,Introductionfrom Product_test where ProductId > @LastID order by ProductIdelse--翻到上⼀页select * from(select top 10 ProductId,ProductName,Introductionfrom Product_test where ProductId < @FirstID order by ProductId desc) as bb order by ProductIdend例4. ⼀个SQL语句把两个查询结果union叠加起来举例如下:drop table test1;drop table test2;create table test1 (a char(4),c char(4));create table test2 (a char(4),c char(4));insert into test1 values('aaa','bbb')insert into test1 values('aaa','aaa')insert into test2 values('ccc','aaa')insert into test2 values('aaa','aaa')select 1 as b,* from test1 where a like 'aaa'union select 2 as b,* from test2 where c like 'aaa'order by b这个就是你那条语句,返回结果为1 aaa aaa1 aaa bbb2 aaa aaa2 ccc aaa1,2表⽰查询出来的记录来源于那⼀个表格先在去除重复的范围内选取,举例如下:select 1 as b,* from test1 where a like 'aaa'union select 2 as b,* from test2 where c like 'aaa' and (a+c) not in (select a+c from test1)order by b返回结果:1 aaa aaa1 aaa bbb2 ccc aaa具体怎么改你的语句,根据实际情况来。
存储过程及其实例演示
存储过程及其实例演⽰概念存储过程存储过程是为了完成特定功能的SQL语句的集合。
包括了⼀些流程控制语句及数据类型。
种类⾃定义存储过程创建1.使⽤CREATE PROCEDURE创建存储过程CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>-- Add the parameters for the stored procedure here<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for procedure hereSELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>ENDGOps:procedure_name 存储过程的名称。
最长为128个字符sysname:存储过程的参数。
相当于数据类型nvarchar(128)。
相见:@param1:存储过程中使⽤到的参数。
@Datatype:参数的数据类型。
另外⼤家可以看到这⾥的SQL语句都是⼤写的。
这是因为SQL语⾔在执⾏的时候是先转化为⼤写再去执⾏,对于⼀些⼩的程序这些转化的时间可以忽略,但是当⼀些⼤型的数据处理的时候就会浪费许多时间。
sqlserver存储过程举例
sqlserver存储过程举例SQL Server存储过程是一段预先编译好的SQL代码,能够被多次执行。
它可以接受输入参数并返回输出参数,还可以执行逻辑判断和循环等复杂操作。
下面我列举了10个例子来展示SQL Server存储过程的使用。
1. 创建新的存储过程:```sqlCREATE PROCEDURE sp_CreateNewEmployee@FirstName NVARCHAR(50),@LastName NVARCHAR(50),@Salary FLOATASBEGININSERT INTO Employees (FirstName, LastName, Salary)VALUES (@FirstName, @LastName, @Salary)END```这个存储过程用于向Employees表中插入新的员工记录。
2. 更新存储过程:```sqlCREATE PROCEDURE sp_UpdateEmployeeSalary@EmployeeID INT,@NewSalary FLOATASBEGINUPDATE EmployeesSET Salary = @NewSalaryWHERE EmployeeID = @EmployeeID END```这个存储过程用于更新指定员工的薪水。
3. 删除存储过程:```sqlCREATE PROCEDURE sp_DeleteEmployee @EmployeeID INTASBEGINDELETE FROM EmployeesWHERE EmployeeID = @EmployeeID END```这个存储过程用于删除指定员工的记录。
4. 查询存储过程:```sqlCREATE PROCEDURE sp_GetEmployeeByID@EmployeeID INTASBEGINSELECT * FROM EmployeesWHERE EmployeeID = @EmployeeIDEND```这个存储过程用于根据员工ID查询员工信息。
oracle存储过程范例
oracle存储过程范例Oracle存储过程范例Oracle存储过程是一种预编译的程序,它可以在数据库中存储并重复使用。
存储过程可以接受参数,执行一系列的SQL语句,并返回结果。
在Oracle数据库中,存储过程可以提高数据库的性能和安全性,同时也可以简化应用程序的开发。
下面是一个Oracle存储过程的范例:CREATE OR REPLACE PROCEDURE get_employee_details (p_employee_id IN NUMBER, p_employee_details OUT SYS_REFCURSOR)ISBEGINOPEN p_employee_details FORSELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_idFROM employeesWHERE employee_id = p_employee_id;END;这个存储过程的名称是get_employee_details,它接受一个参数p_employee_id,这个参数是一个整数类型的员工ID。
存储过程的输出参数是p_employee_details,它是一个游标类型的变量,用于返回查询结果。
在存储过程的主体中,使用OPEN语句打开游标,并执行一个SELECT语句,查询employees表中指定员工ID的详细信息。
最后,将查询结果赋值给输出参数p_employee_details。
使用这个存储过程可以很方便地获取指定员工的详细信息。
例如,可以使用以下代码调用这个存储过程:DECLAREv_employee_details SYS_REFCURSOR;BEGINget_employee_details(100, v_employee_details);-- 处理查询结果END;在这个例子中,调用存储过程get_employee_details,并将员工ID 设置为100。
oracle的存储过程写法
oracle的存储过程写法Oracle的存储过程写法Oracle是一款非常常用的关系型数据库管理系统,其存储过程是一种非常重要的功能。
下面我们来看一下Oracle的存储过程写法。
1. 创建存储过程在Oracle中,创建存储过程需要使用CREATE PROCEDURE语句。
下面是一个简单的例子:CREATE PROCEDURE my_procedureASBEGIN-- 存储过程的代码END;在这个例子中,我们创建了一个名为my_procedure的存储过程,其中存储过程的代码写在BEGIN和END之间。
2. 存储过程的参数存储过程可以接受参数,这些参数可以是输入参数、输出参数或输入/输出参数。
下面是一个接受输入参数的例子:CREATE PROCEDURE my_procedure(input_param IN VARCHAR2)ASBEGIN-- 存储过程的代码在这个例子中,我们定义了一个名为input_param的输入参数。
3. 存储过程的返回值存储过程可以返回一个值,这个值可以是一个标量值或一个游标。
下面是一个返回标量值的例子:CREATE PROCEDURE my_procedure(output_param OUT NUMBER)ASBEGINSELECT COUNT(*) INTO output_param FROM my_table;END;在这个例子中,我们定义了一个名为output_param的输出参数,并将一个查询结果赋值给这个参数。
4. 存储过程的异常处理存储过程中可能会出现异常,我们需要对这些异常进行处理。
下面是一个异常处理的例子:CREATE PROCEDURE my_procedureASBEGINBEGIN-- 存储过程的代码EXCEPTIONWHEN OTHERS THEN-- 异常处理的代码END;在这个例子中,我们使用BEGIN和END将存储过程的代码括起来,并使用EXCEPTION关键字来处理异常。
mysql创建存储过程案例
MySQL创建存储过程案例1. 背景假设我们有一个电商平台,需要实现一个功能:根据用户购买的商品数量计算订单总价,并将订单信息插入到订单表中。
为了实现这个功能,我们可以使用MySQL的存储过程来简化开发和提高性能。
2. 过程首先,我们需要创建一个存储过程来完成上述功能。
下面是一个示例的存储过程:DELIMITER //CREATE PROCEDURE calculate_order_total_price(IN user_id INT, IN product_id INT, IN quantity INT)BEGINDECLARE price DECIMAL(10, 2);DECLARE total_price DECIMAL(10, 2);-- 获取商品价格SELECT unit_price INTO price FROM products WHERE id = product_id;-- 计算订单总价SET total_price = price * quantity;-- 插入订单信息到订单表中INSERT INTO orders (user_id, product_id, quantity, total_price) VALUES (user_id, product_id, quantity, total_price);END//DELIMITER ;上述存储过程接受三个参数:user_id表示用户ID,product_id表示商品ID,quantity表示购买数量。
它首先从products表中获取商品价格,然后计算订单总价,并将订单信息插入到orders表中。
3. 结果现在我们可以调用上述存储过程来创建订单并计算订单总价。
以下是一个示例调用:CALL calculate_order_total_price(1, 2, 5);上述调用表示用户ID为1的用户购买ID为2的商品,数量为5。
执行该调用后,存储过程会根据商品价格和购买数量计算订单总价,并将订单信息插入到orders表中。
存储过程实例精选
整理者为我实例1:只返回单一记录集的存储过程。
银行存款表(bankMoney)的内容如下要求1:查询表bankMoney的内容的存储过程create procedure sp_query_bankMoneyasselect * from bankMoneygoexec 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 outputwith encryption ---------加密asinsert 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 intexec insert_bank '004','Zhangsan','男',100,@total_price outputprint '总余额为'+convert(varchar,@total_price)go在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):1.以Return传回整数2.以output格式传回参数3.Recordset传回值的区别:output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。
存储过程几种写法
存储过程⼏种写法1)创建使⽤参数的存储过程Create Proc au_info @lastname varchar(40),@firstname varchar(20)AsSelect au_lname,au_fname,title,pub_nameFrom ...where au_fname=@firstname And au_lname=@lastnameGoEXECUTE au_info ringer,anne2)创建使⽤参数默认值的存储过程,该存储过程在没有输⼊参数的情况下将默认值得到的结果输出Create Proc au_info @lastname varchar(40)='ringer',@firstname varchar(20)='anne'AsSelect au_lname,au_fname,title,pub_nameFrom ...where au_fname=@firstname And au_lname=@lastnameGoEXECUTE au_info3)⽤显式值替代参数默认值的存储过程Create Proc showind @table varchar(30) ='titles'asSELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexes inner join sysobjects on sysobjects.id=sysindexes.idwhere =@tableEXECUTE showind authors4)使⽤参数默认值NULL来创建存储过程,在这种情况下如果没有提供参数值,SQL将不会出错显⽰Create Proc showind @table varchar(30) =NullasIF @table is NUllprint '请输⼊参数'elseSELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexs inner join sysobjects on sysobjects.id=sysindexes.idwhere =@tableEXECUTE showind authors5)使⽤包含通配符的参数默认值创建存储过程通配符包括(% , _ , [ ]和 [^]),注意需要⽤Like关键字CREATE PROC au_info @lastname varchar(40)='r%' , @firstname varchar(20)='%' AS Select au_lname,au_fname,title,pub_namefrom authors inner join titleauthor on authors.au_id=titleauthor.au_idjoin titles on titleauthor.title_id=titles.title_idjoin publishers on titles.pub_id=publishers.pub_idwhere au_fname like @firstnameand au_lname like @lastnameGO。
存储过程格式
/*过程的命名,一般是目标表名前加P_,比如目标表是TABLE_01,则过程名字是P_TABLE_01。
一个过程可以有若干个插入语句,插入语句之后,不要忘记COMMIT.我们只拿一个的举例子。
过程中用到的表都是提前建好的。
一般不在过程中建表。
表名也可以作为输入参数,如果表名作为输入参数,则对该表的操作,需要使用动态SQL。
在命名过程前确保没有重名的过程,否则会因为使用 REPLACE PRCEDURE 覆盖以前的过程*/CREATE OR REPLACE PROCEDURE "P_TABLE_01"(V_ACCT IN VARCHAR2,V_RETCODE OUT VARCHAR2,V_RETINFO OUT VARCHAR2) IS/*------------------------------------------------------------------------------------过程名:P_TABLE_01生成时间:编写人:CHZ生成周期:月数据来源:TABLE_02--一般是一张表,或者几张表,通过连接(内、外连接),或者集合操作(并,差等),用来生成TABLE_01的数据目标表:TABLE_01过程说明:预流失用户清单表修改记录:------------------------------------------------------------------------------------*/V_COUNT NUMBER; --用来日志判断的V_PKG VARCHAR2(40);V_PROCNAME VARCHAR2(40);V_ROWLINE NUMBER := 0;V_TAB_NAME VARCHAR2(50);V_SVCID VARCHAR2(100);BEGINV_PKG := 'P_TABLE_01'; -- 包名V_PROCNAME := 'P_TABLE_01'; -- 过程名称V_TAB_NAME := 'TABLE_01'; --表名/*日志部分,调用一个过程,记录你对表的操作情况,这个过程 P_INSERT_LOG,是对日志表INSERT_LOG进行操作的过程,一般记录相关操作信息,是开始信息,最后还一个更新过程,标记操作是否成功的。
存储过程写法
17
四、存储过程应用: • 带输出参数的存储过程: 例4: 执行, USE SCMIS GO DECLARE @stu_no char(5), @msg varchar(60), @return_status int, @numcourse int SET @stu_no=‘14002' EXEC @return_status=course_proc3 @stu_no,@numcourse OUTPUT
12
四、存储过程应用: • 带输入参数的存储过程: 例2: 执行: DECLARE @c char(2) DECLARE @d nvarchar(8) SET @c='C2' SET @d='CS' EXEC course_proc2 @c,@d GO 或,EXEC course_proc2 'C2','CS'
或,EXEC course_proc2 @ins_dept='CS',@ins_cno='C2'
13
四、存储过程应用: • 带输出参数的存储过程:
例3:创建一个完成乘法的存储过程。 CREATE PROC mathtutor (@m1 smallint, @m2 smallint, @result smallint OUTPUT) AS SELECT @result=@m1*@m2 GO
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--存储过程的创建和调用演示
-------------------------------------
--1.不带参数的存过过程的创建
CREATEPROCEDURE PRO_WITH_NO_PARAM
AS
BEGIN--BEGIN 可省略
SELECT*FROM C;
END--END 可省略
--调用
EXEC PRO_WITH_NO_PARAM;
------------------------------------
--2.带参数的存储过程
CREATEPROCEDURE PRO_WHIT_PARAM
(
@Sno char(5),
@Cno char(1)
)
AS
BEGIN
SELECT*FROM SC WHERE Sno=@Sno AND Cno=@Cno
END
--调用
EXEC PRO_WHIT_PARAM '09002','3'
---------------------------------------
--3.带一个参数的多表查询存储过程
CREATEPROCEDURE PRO_QUERY_DOUBLE_TABLE
(
@Sname_IN char(6)
)
AS
BEGIN
SELECT Sname,Ssex,Sage,Sdept,Cno,Grade FROM S STU ,SC SCTU WHERE STU.Sno = SCTU.Sno AND Sname = @Sname_IN
END
--执行
EXEC PRO_QUERY_DOUBLE_TABLE '姑姑'
-----------------------------------------
--4.创建一个插入表的存储过程
CREATEPROCEDURE PRO_INSERT
(
@Sno_IN CHAR(5),
@Cno_IN CHAR(1),
@Grade_IN int
)
AS
BEGIN
INSERTINTO SC (Sno,Cno,Grade)values(@Sno_IN,@Cno_IN,@Grade_IN)
END
--执行
EXEC PRO_INSERT '09003','3','99'
--------------------------------------------------
--5.默认参数的存储过程
CREATEPROCEDURE PROC_WHIT_DEFAULT_PARAM
(
@Sno_IN CHAR(5)='09003',
@Cno_IN CHAR(1)='3'
)
AS
BEGIN
SELECT*FROM SC WHERE Sno=@Sno_IN AND Cno=@Cno_IN
END
--执行[注意:这种存储过程有三种方式进行调用,全部使用默认值,部分使用默认值,全部使用输入值]
EXEC PROC_WHIT_DEFAULT_PARAM
EXEC PROC_WHIT_DEFAULT_PARAM '09002'
EXEC PROC_WITH_DEFAULT_PARAM '09002','3'
--6.带输出参数的存过过程
CREATEPROCEDURE PROC_WHIT_OUT_PARAM
(
@Grade_OUT INTOUTPUT
)
AS
BEGIN
SELECT @Grade_OUT = Grade FROM SC WHERE Sno='09003'AND Cno='3'
END
DECLARE @Grade_RESULT INT--声明一个变量来存储输出参数输出的值
EXEC PROC_WHIT_OUT_PARAM @Grade_OUT = @Grade_RESULT OUTPUT
PRINT @Grade_RESULT
--------------------------------
--写控制逻辑
IF @Grade_RESULT >=90
PRINT'优秀'
ELSEIF(@Grade_RESULT < 90 AND @Grade_RESULT >85)
PRINT'良好'
ELSE
PRINT'好'
---------------------------------
SELECT*FROM SC
--存储过程的状态值
--7.使用一个值来保存执行后的状态
CREATEPROCEDURE PROC_WITH_STATUS_VALUE
(
@Sno_IN CHAR(5)
)
AS
BEGIN
SELECT*FROM SC WHERE Sno = @Sno_IN
END
--通常的执行过程
EXEC PROC_WITH_RETURN_VALUE '09003'
--使用记录状态的执行
DECLARE @STATUS INT
EXEC @STATUS = PROC_WITH_STATUS_VALUE @Sno_IN ='09003' PRINT @STATUS
IF(@STATUS = 0)
PRINT'执行成功'
ELSE
PRINT'执行失败'
--存储过程的返回值
CREATEPROCEDURE PROC_WITH_RETURN_VALUE
(
@Sno_IN CHAR(5)
)
AS
BEGIN
DECLARE @GRADE_RESULT INT
SELECT @GRADE_RESULT = Grade FROM SC WHERE Sno = @Sno_IN IF @GRADE_RESULT >90
RETURN 1
ELSE
RETURN 2
END
--执行存储过程
DECLARE @STATUS INT
EXEC @STATUS = PROC_WITH_RETURN_VALUE @Sno_IN ='09003' PRINT @STATUS
IF @STATUS = 1
PRINT'优秀'
ELSEIF @STATUS =2
PRINT'良好'
--8.输入输出参数的存储过程
CREATEPROCEDURE PROC_WITH_IN_AND_OUT_PARAM
(
@Sno_IN CHAR(5),
@Grade_OUT INTOUTPUT
)
AS
BEGIN
SELECT @Grade_OUT = Grade FROM SC WHERE Sno = @Sno_IN
END
--执行存储过程
DECLARE @Grade_RESULT INT
EXEC PROC_WITH_IN_AND_OUT_PARAM @Sno_IN ='09003',@Grade_OUT = @Grade_RESULT OUTPUT
PRINT @Grade_RESULT
SELECT*FROM SC;。