SybaseIQ存储过程学习笔记.docx
文本预览下载声明
实践:
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 动态的创建了临
显示全部