转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
Adaptive Server Anywhere 7.0网上培训教材         ★★★★

Adaptive Server Anywhere 7.0网上培训教材

作者:闵涛 文章来源:闵涛的学习笔记 点击数:7843 更新时间:2009/4/22 23:09:43
回输出参数或结果集 

存储过程的优点 :

1、改善性能 
2、提高安全性 
3、减少网络交通量 
4、提高开发人员的生产率 
5、能充分发挥专家的作用 
6、简化了应用的维护 
7、应用的灵活性 
8、确保算法的一致性 
9、数据透明性 

存储过程的缺点:

1、可能加重了服务器方的负载 
2、要注意对该共享资源的管理以免造成并发冲突 
3、可移植性差 

存储过程的结构 :
在CREATE PROCEDURE 语句中可包含:
1、过程参数清单的说明
2、结果集 
3、过程体,它由复合SQL语句构成 

存储过程的结果:
1、OUT 或 INOUT 参数 
2、结果集 
3、允许存储过程返回多个列和行 
4、RETURN 状态 
5、允许你无条件地退出一个存储过程,同时返回一个特定的状态值。 

CREATE PROCEDURE:

1、CREATE PROCEDURE 
进行语法分析 存入系统表 SYSPROCEDURE 
2、直到被调用时才被编译 
然后建立存取计划并存储在内存中 
在ASE中,你必须以明显方式指明要进行编译。 
3、基本语法 CREATE PROCEDURE procedure-name  ([IN | OUT | INOUT] parameter-name datatype [DEFAULT expression], …) [RESULT (result-col1, result-col2, ...)] compound-statement

实例 :
CREATE PROCEDURE big_num 
(IN a INT, IN b INT, OUT c INT) 
 BEGIN
 IF a > b 
THEN 
 SET c = a;
 ELSE 
 SET c = b; 
 END IF; 
END; 

参数列表清单 :
1、用来向存储过程传送值或接受存储过程返回值 
2、参数的定义 
种类: IN, OUT 或 INOUT 
名字: 要遵守数据库标识符约定 
数据类型: 任何有效的Adaptive Server Anywhere 数据类型 
可给出 DEFAULT 值 
3、在掉用该存储过程时,必须为每个参数提供一个值。 

为参数赋值 :

1、SET 语句 
2、SELECT INTO 语句 

实例:
CREATE PROCEDURE order_count
(IN @customer_id INT, OUT @orders INT) 
BEGIN 
 SELECT COUNT("dba".sales_order.id)  INTO @orders FROM "dba".customer KEY LEFT OUTER JOIN "dba".sales_order WHERE "dba".customer.id = @customer_id; 
END


结果集 :
1、允许一个存储过程返回多行 
2、实例 1 — 返回客户的 ID和订单 
CREATE PROCEDURE customer_orders( ) 
RESULT (customer_id INT, order_count INT) 
BEGIN  
SELECT "dba".customer.id, COUNT( "dba".sales_order.id )  FROM "dba".customer KEY LEFT OUTER JOIN   "dba".sales_order GROUP BY "dba".customer.id; 
END; 

3、还可由多个SELECT 语句返回数据
4、结果集中必须: 列的数目相同 有相同的数据类型 (或是可进行隐式转换)
5、T-SQL 可以包含动态的结果集
6、实例 2 — 返回客户和联系人的清单 
CREATE PROCEDURE custs_and_contacts ( ) 
RESULT (lname CHAR (36), fname CHAR (36)) 
BEGIN 
SELECT lname, fname FROM "dba".customer; 
SELECT last_name, first_name FROM "dba".contact; 
END;


组合语句 :

1、用在过程本体中 
 被BEGIN 和 END所包围 
2、可包含局部说明,它仅在组合语句的上下文中有效。 
局部说明可被嵌套的子句所访问 
3、被内部语句所使用的资源要在它们的语句的 END处才释放 
4、实例:
CREATE PROCEDURE someproc ( )
  BEGIN
    DECLARE x INT;
    DECLARE y INT;
    SELECT count(*) INTO x FROM TableA;
    SELECT count(*) INTO y FROM TableB;
    BEGIN
      DECLARE z INT;
      CALL greater (x, y, z); 
      PRINT ‘z = %1!’, z;
      END;
 END;


编写存储过程的注意事项 :

1、校验命令分隔符 
2、语句的分隔 
使用分号 
3、应采用完全受限命名 
4、应采用无二意性的日期和时间格式 


过程化语言 :

1、Adaptive Server Anywhere 过程化扩展 
说明语句 
条件语句 
反复循环语句 
分支语句 
错误处理指令 
2、编写存储过程就类似于编程序 

说明语句 :
1、BEGIN, END 
2、DECLARE, SET 
3、说明: 变量 表达式 语句块 
4、赋值 

BEGIN 和 END:
1、定义一个组合语句 
2、可包含局部变量,游标,临时表及表达式。 
3、语法 
BEGIN [ATOMIC] 
… 
… 
END
4、实例
BEGIN 
 UPDATE product  SET unit_price = 1.25 * unit_price; 
 UPDATE employee  SET salary = .95 * salary; 
END; 


原子化多个SQL语句 :
1、这些语句或是全部完成或是一个也不做 
2、确保数据的一致性 
3、使用 BEGIN ATOMIC 语法 
4、实例: 
CREATE PROCEDURE update_dept(IN @old_dept_num INT, IN @new_dept_num INT, IN @new_dept_name CHAR (40), IN @new_dept_head_id INT) 
BEGIN ATOMIC 
    INSERT INTO department (dept_id, dept_name,    dept_head_id)   VALUES (@new_dept_num, @new_dept_name, @new_dept_head_id); 
    UPDATE employee  SET dept_id = @new_dept_num 
    WHERE dept_id = @old_dept_num; 
    DELETE FROM department 
    WHERE dept_id = @old_dept_num; 
END ;

DECLARE:

1、说明变量,游标,临时表及表达式。 
2、利用SET设置初始值 
3、必须紧跟在一个 BEGIN 语句之后 
ASE的T-SQL 允许在存储过程中的任何点使用 DECLARE 

DECLARE variable-name datatype; 
SET variable-name expression; 
DECLARE LOCAL TEMPORARY TABLE table-name (table-definition) •[ON COMMIT {DELETE | PRESERVE} ROWS]

4、实例: 
BEGIN 
  DECLARE discount numeric (6,2); 
  SET discount = .15;
  SELECT discount * unit_price FROM product; 
END 
BEGIN 
  DECLARE LOCAL emp_temp (emp_fname char(20), emp_lname  char (20) ON COMMIT DELETE ROWS); 
END 


条件语句 :

1、根据前面的语句来改变执行流程 
2、IF 
3、CASE 
4、RETURN (经常是伴有条件来使用)

IF 语句 :
1、当一个条件为 TRUE(真)时准许执行 
2、ELSE 子句是当一个条件为 FALSE(失败)时准许执行 
3、ELSE IF 准许附加的条件 
4、语法: 
IF search-condition1 THEN statement-list1;
[ELSEIF search-condition2 
 THEN statement-list2];
[ELSE statement-list3];
END IF;

5、实例 
IF @color = red 
THEN SELECT * FROM product  WHERE color = 'red'; 
ELSEIF @color = blue 
THEN 
SELECT * FROM product  WHERE color = 'blue'; 
ELSE SELECT * FROM product; 
END IF; 


CASE 语句 :

1、利用WHEN子句指明多个条件 
2、ELSE子句是用于如果没有一个WHEN子句能成为 TRUE时 
3、语法: 
CASE value-expression
 WHEN constant1 THEN statement-list1
 WHEN constant2 THEN statement-list2
 WHEN constant3 THEN statement-list3
 ELSE statement-list4;
END CASE; 

4、实例 
CASE @id_type 
 WHEN 'cust' THEN 
SELECT id  FROM customer 
 WHEN 'dept' THEN 
SELECT dept_id   FROM department 
 WHEN 'contact' THEN 
SELECT id  FROM contact 
 ELSE 
SELECT emp_id FROM employee; 
END CASE; 

RETURN 语句:

1、导致立即退出一个存储过程 
2、可带有表达式以向调用者返回单个值 
3、语法: 
RETURN [表达式] 
4、实例: 
IF  @quantity =>1 
THEN 
UPDATE sales_order_items  SET quantity = @quantity; 
ELSE RETURN 'You must enter a quantity'; 
END IF; 


反复循环语句:

1、请看Adaptive Server Anywhere参考手册第9章:SQL语句 
2、 LOOP 语句 [WHILE…] LOOP 
3、其中 WHILE 条件是选项 
4、FOR (用在游标中)


WHILE…LOOP:

1、只要WHILE条件为TRUE则不断地重复执行 
2、语法 
[statement-label:]
 [WHILE condition] LOOP 
statement-list 
END LOOP [statement-label] 

3、实例: 
SET @total = 0;
SET @num_items = 0; 
INSERT INTO total_temp VALUES (0,0); 
loop1: 
WHILE @total < 100.00 LOOP 
 UPDATE total_temp SET num_items = @num_items; 
SET @total = @total + SELEC

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  下一页


[聊天工具]企业邮件系统的利器----FoxMail Server  [系统软件]OPEN SERVER 5.0.5安装EXP300阵列柜
[系统软件]关于Windows2000Server的灾难恢复  [常用软件][网络]下载服务革命性风暴Poco Server评测
[C语言系列]动态创建SQL Server数据库、表、存储过程等架构信…  [C语言系列]SQL Server到DB2连接服务器的实现
[C语言系列]SQL Server到SYBASE连接服务器的实现  [C语言系列]SQL Server到SQLBASE连接服务器的实现
[C语言系列]SQL Server连接VFP数据库的实现  [C语言系列]ASP+SQL Server之图象数据处理
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台