文档详情

SybaseIQ存储过程学习笔记.docx

发布:2019-01-15约8.41千字共11页下载文档
文本预览下载声明
实践: SYBASE IQ存储过程学习笔记 存储过程 存储过程将过程化的SQL语句存储在数据库中,供所有程序使用。存储过程中可以包含控制语句,如LOOP循环语句、IF和CASE这样的条件语句。存储过程通过CALL语句进行调用,使用变量传入参数和返回结果。可以返回结果集,也可以调用其他的存储过程。 存储过程和函数的区别 自定义函数是只能返回单一值的特定的存储过程。函数不修改传入的参数,但是可以使其用于查询和其他SQL语句之中。 存储过程的调试 参见附录C Debugging Logic in the Database 存储过程概要 常用的存储过程 创建存储过程 修改存储过程 调用存储过程 删除存储过程 存储过程的访问控制 返回值 常用的存储过程 sp_iqprocedure 此存储过程可以显示系统和用户自定义的存储过程 sp_iqprogram 显示存储过程的参数信息,包括结果集变量和SQLSTATE/SQLCODE错误值 创建存储过程 CREATE PROCEDURE new_dept (IN id INT, IN name CHAR(35), IN head_id INT ) BEGIN 复合语句,放在BEGIN和END之间;复合语句可以相互嵌套;复合语句用于将多个语句组合成一个单元,其中的SQL语句用分号分隔;除了最后一个分号,其他都是必须的;复合语句中声明的局部变量只在复合语句中可;可以在BEGIN后面加上ATOMIC,将复合语句声明为原子性,此时就不可使用COMMIT、ROLLBACK和ROLLBACK TO SAVEPOINT. INSERT INTO DBA.department (dept_id, dept_name, dept_head_id) VALUES (id, name, head_id); END 修改存储过程 使用SQL语句ALTER PROCEDURE,将整个新的存储过程包含其中。 必须重新给修改后的存储过程赋予用户权限。 调用存储过程 CALL new_dept(210, ‘Eastern Sales’, 902); 必须赋予EXECUTE权限才可以执行此存储过程, GRANT EXECUTE ON new_dept TO another_user;REVOKE EXECUTE ON new_dept FROM another_user 删除存储过程 DROP PROCEDURE new_dept 存储过程的访问控制 见注(2) 返回值 可以通过三种方式传回值:使用OUT或者INOUT返回值;返回结果集;使用RETURN语句返回单值。 使用OUT和INOUT返回值 调用之前,可以先声明一个变量保存结果,语句如下CREATE VARIABLE Average NUMERIC(20,3) CREATE PROCEDURE AverageSalary( OUT avgsal NUMERIC (20,3) ) BEGIN SELECT AVG( salary ) INTO avgsal FROM employee; END 返回结果集 CREATE PROCEDURE SalaryList (IN department_id INT) RESULT ( Employee ID INT, Salary NUMERIC(20,3) ) 存储过程还可以返回多个同类型的结果集,必须在客户端中启用返回多个结果集的支持。例: CREATE PROCEDURE ListPeople() RESULT ( lname CHAR(36), fname CHAR(36) ) BEGIN SELECT emp_lname, emp_fname FROM employee; SELECT lname, fname FROM customer; SELECT last_name, first_name FROM contact; END BEGIN SELECT emp_id, salary FROM employee WHERE employee.dept_id = department_id; END 如果在存储过程中一个语句动态的创建了一个临时表,然后从里面选取结果集,为了避免如“Column not found”这样的错误,必须使用EXECUTE IMMEDIATE WITH RESULT SET ON这样的语法。例: CREATE PROCEDURE p1 (IN @t varchar(30)) BEGIN EXECUTE IMMEDIATE SELECT * INTO #resultSet 动态的创建了临
显示全部
相似文档