远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

create view

说明 创建一个视图,视图是查看一个或多个表中的数据的一种替代方法。

语法 create view [owner.]view_name [(column_name[, column_name]...)] as

select [distinct] select_statement

[with check option]

参数 view_name

是视图的名称。名称中不能包括数据库名。如果设置了 set quoted_identifier on,就可以使用分隔标识符。否则,视图名不能为变 量,且必须遵循标识符的规则。指定所有者的名称,以创建由当前数据 库中的其他用户拥有的另一个同名视图。 owner 的缺省值是当前用户。

column_name

指定用于视图中列的标题的名称。如果设置了 set quoted_identifier on , 就可以使用分隔标识符。否则,列名必须符合标识符的规则。

始终可以提供列名,但列名仅在下列情况下需要:

列是从算术表达式、函数、字符串并置或常量中派生出来的

两列或多列具有相同的名称 (通常是由于连接)

要为视图中的列指定一个与派生该列的列不同的名称 (请参见示 例 3

也可以在 select 语句中分配列名 (请参见示例 4 )。如果未指定列 名,视图列的名称将获得与 select 语句中的列的名称相同的名称。

select

开始定义视图的 select 语句。

distinct

指定视图不能包含重复行。

select_statement

完成定义视图的 select 语句。 select 语句可使用多个表和其它视图。

with check option 表示所有数据修改语句都通过视图选择标准进行了验证。所有通过视 图插入或更新的行都必须可以通过该视图来查看。

示例 示例 1 创建一个从基表 titles titletypeprice pubdate 列派生的视 图:

create view titles_view

as select title, type, price, pubdate from titles


示例 2 Creates new viewfrom old view.Both columns are renamed in the new view.所有包含嵌入空白的视图名和列名都用双引号引起来。 创建视图之前,必须使用 set quoted_identifier on

create view "new view" ("column 1", "column 2") as select col1, col2 from "old view"

示例 3 为价格低于 $5.00 的书创建一个包含书名、预付款及应付款的视图:

create view accounts (title, advance, amt_due) as select title, advance, price * total_sales from titles

where price > $5

示例 4 创建一个从 authors publishers 这两个基表派生的视图。此视图 包含所居住城市内有一个出版社的作者的姓名和居住城市:

create view cities

(authorname, acity, publishername, pcity) as select au_lname, authors.city, pub_name, publishers.city

from authors, publishers

where authors.city = publishers.city

示例 5 创建和前一示例中的定义相同的视图,但在 select 语句中包含列 标题:

create view cities2

as select authorname = au_lname,

acity = authors.city, publishername = pub_name, pcity = publishers.city

from authors, publishers

where authors.city = publishers.city

示例 6 创建视图 author_codes,此视图从列出了唯一的作者标识代码的 titleauthor 派生:

create view author_codes as select distinct au_id from titleauthor

示例 7 创建视图 price_list,此视图从列出了唯一的书价的 title 派生:

create view price_list (price) as select distinct price

from titles

示例 8 创建 stores 表的视图,表中不包括位于加利福尼亚以外的店铺的 信息。 with check option 子句根据视图的选择标准验证插入或更新的每一 行。所有 state 值不是 “CA”的行都会被拒绝:


create view stores_cal as select * from stores where state = "CA"

with check option

示例 9 创建从 stores_cal 派生的视图 stores_cal30。新视图从 stores_cal 继 承 check 选项。所有通过 stores_cal30 插入或更新的行的 state 值都必须 为 “CA”。因为 stores_cal30 没有 with check option 子句,所以可以为 payterms 的值不为 “Net 30”的行通过 stores_cal30 插入或更新行:

create view stores_cal30 as select * from stores_cal where payterms = "Net 30"

示例 10 创建从 stores_cal 派生的视图 stores_cal30_check。新视图从 stores_cal 继承 check 选项。它本身还具有 with check option 子句。每个通 过 stores_cal30_check 插入或更新的行都根据 stores_cal stores_cal30_check 的选择标准进行验证。 state 值不为 “CA”或 payterms 值不为 “Net 30”的行将被拒绝:

create view stores_cal30_check as select * from stores_cal where payterms = "Net 30"

with check option

示例 11 创建视图时使用 SQL 派生表:.

create view psych_titles as select *

from (select * from titles

where type = "psychology") dt_psych


用法 您可以通过对视图而不是对其基础表授予权限来将视图用作安全机 制。

可以使用 sp_rename 来重命名视图。

通过视图查询时, Adaptive Server 会进行检查,以确保在语句中的 任何位置引用的数据库对象全都存在,它们在语句的环境中均有 效,而且数据更新命令不违反数据完整性规则。如果上述检查中的 任何一个失败,您都会看到错误消息。如果检查成功, create view 会将视图 “转换为”对基础表的操作。

有关视图的详细信息,请参见 《Transact-SQL 用户指南》。

视图的限制

只能在当前数据库中创建视图。

视图所引用的列数不能超过 1024


不能在临时表上创建视图。

不能在视图上创建触发器或建立索引。

不能对视图中的 textunitext image 列使用 readtext writetext

不能在定义视图的 select 语句中包含 order bycompute 子句或关键 字 into

不能用包含 union 运算符的 select 语句从视图进行更新、插入或删除。

如果使用局部或全局变量创建视图, Adaptive Server 将发出错误消 息 7351:“Local or global variables not allowed in view definition.

可以在单个批处理中组合 create view 语句与其它 SQL 语句。


image

警告!当在 if...else 块或 while 循环中出现 create view 命令时,Adaptive Server 将在决定条件是否为真之前创建该视图的模式。如果该视图已 经存在,则会导致错误。为了避免这种情况,请检验数据库中不存 在具有相同名称的视图,或者按如下方式使用 execute 语句:

if not exists

(select * from sysobjects where name="mytable") begin

execute ("create table mytable (x int)") end


image


视图解析

如果通过添加或删除列来改变视图基础表的结构,新列将不会出现 在用 select * 子句定义的视图中,除非删除并重新定义视图。首次创 建视图时,星号速记符得到了解释和扩展。

如果视图所依赖的表或视图已被删除,当有人试图使用该视图时, Adaptive Server 将返回错误消息。如果创建了具有相同名称和模式的 新表或视图来替代已被删除的表或视图,则此视图将再次变为可用。

可以重新定义视图而不重新定义依赖于它的其它视图,除非重新定 义使得 Adaptive Server 不能转换任何相关视图。

通过视图修改数据

delete 语句不得用于多表视图。

除非基础表或视图中的所有 not null 列都包含在用来插入新行的视图 中,否则不允许使用 insert 语句。Adaptive Server 无法为基础表或视 图中的 not null 列提供值。


不能通过视图直接对计算列执行插入。计算列的值只能由 Adaptive Server 在内部生成。

在用 distinct with check option 创建的连接视图中不允许使用 insert

语句。

在用 with check option 创建的连接视图中,允许使用 update 语句。如 果任何受影响的列出现在 where 子句中,或出现在包含来自多个表 的列的表达式中,更新将会失败。

如果通过连接视图来插入或更新行,所有受影响的列都必须属于同 一基表。

不能对用 distinct 子句定义的视图进行更新或插入。

数据更新语句不能更改作为计算的视图中的任何列,也不能更改包 含集合的视图。

IDENTITY 列和视图

不能使用 column_name = identity (precision) 语法向视图添加新的

IDENTITY 列。

要向 IDENTITY 列插入显式值,表的所有者、数据库所有者或系统 管理员必须将列的基表设置为 set identity_insert table_name on,而不 是通过插入所通过的视图。

group by 子句和视图

当出于安全性考虑而创建视图时,应谨慎使用集合函数和 group by 子 句。 Transact-SQL 扩展允许命名不出现在 group by 子句中的列。如果命 名不出现在 group by 子句中的列,则 Adaptive Server 会返回该列的详细 数据行。例如,此 Transact- SQL 扩展列查询会为每 18 行返回一行 比您 想得到的数据要多:

select title_id, type, sum (total_sales) from titles

group by type

而下面的 ANSI 兼容的查询为每个类型返回一行 (共 6 行):

select type, sum (total_sales) from titles

group by type

请参见 434 页的 “ group by having 子句

distinct 子句和视图

distinct 子句将视图定义为不含重复行的数据库对象。如果某行的所 有列值都与另一行的相同列值相匹配,则该行就被定义为另一行的 重复行。 NULL 值被看作是其它空值的重复值。


查询视图的列的子集会得到看起来像重复行的内容。如果选择列的 子集,其中有些包含相同的值,结果看起来包含重复行。但视图的 基础行仍然唯一。第一次访问视图时 (进行投影和选择之前), Adaptive Server 对视图定义应用 distinct 要求,因此视图的所有行都 互不相同。

作为集合函数或 group by 子句的一部分,您可以在视图定义的 select

语句中多次指定 distinct 来消除重复行。例如:

select distinct count (distinct title_id), price from titles

distinct 的范围仅适用于该视图,而不包括从 distinct 视图派生的任何 新视图。

with check option 子句和视图

如果视图是用 with check option 创建的,则通过视图插入或创建的每 一行都必须符合视图的选择标准。

如果视图是用 with check option 创建的,则所有从 “基”视图派生的 视图都必须满足其检查选项要求。通过派生视图插入或更新的每一 行都必须能通过基视图查看。

获取有关视图的信息

若要创建有关视图依赖的表或视图的报告,以及依赖于视图的对象 的报告,请执行 sp_depends

若要显示视图的文本 (存储在 syscomments 中),请以视图名作为 参数执行 sp_helptext

SQL 派生表创建视图

要用 SQL 派生表创建视图,请在 create view 语句的 select 部分的

from 子句中添加派生表表达式 (请参见示例 11)。

如果派生表表达式可以更新,则使用 SQL 派生表创建的视图也可以 更新。派生表表达式的更新规则遵循 create view 语句的 select 部分的 更新规则。

如果用于派生表表达式的 insert 规则和权限设置遵守用于 create view 语句的 select 部分的 insert 规则和权限设置,则可通过包含 SQL 派 生表的视图插入数据。

作为 create view 语句的一部分的派生表表达式中不允许使用临时表 和局部变量。

• SQL 派生表不能具有未命名的列。

有关派生表表达式的详细信息,请参见 《Transact-SQL 用户指南》。


标准 符合 ANSI SQL 的级别符合初级标准。

select 列表中多次使用 distinct 关键字和使用 “column_heading = column_name”属于 Transact-SQL 扩展。

权限 创建视图时, Adaptive Server 不对视图所引用的对象 (如表和视图)进 行权限检查。因此,即使不能访问视图的对象,也可以成功创建视图。 所有权限检查在用户调用该视图时进行。

调用视图时,对象上的权限检查取决于视图和所有被引用的对象是否由 同一用户拥有。

如果视图及其对象的所有者不是同一用户,那么调用者必须得到可 以直接访问这些对象的授权。例如,如果视图从调用者不能访问的 表执行 selectselect 语句就会失败。

如果视图及其对象为同一用户所有,则应用特殊的规则。调用者自 动拥有访问视图的对象的隐式权限,即使调用者不能直接访问它 们。不必授予用户直接访问表的权限,可以给予他们有限制地访问 视图的权限。这样,视图就可以是一种安全机制。例如,视图的调 用者可能只能访问表的某些行和列。《系统管理指南》中详细说明 了隐式权限的规则。

如果表中的列已加密,您必须拥有解密权限才能从视图中执行选择 操作。如果视图及其对象不归同一用户所有,则必须对表中的加密 列拥有解密权限,才能从视图中执行选择操作。如果视图及其对象 归同一用户所有,则在与表中的加密列对应的视图列中向必须从视 图中执行选择操作的用户授予解密权限便足够了。

image

细化权限已启用 在启用细化权限的情况下,您必须有 create view 特权。您必须具有 create any view 特权才能为其他用户运行 create view

细化权限已禁用 在禁用细化权限的情况下,您必须是数据库所有者或者具有 create view 特权。


审计 sysaudits event extrainfo 列中的值如下:


事件

审计选项

审计的命令或访问权限

extrainfo 中的信息

16

创建

create view

角色 – 当前活动角色

关键字或选项 NULL

先前值 NULL

当前值 NULL

其它信息 NULL

代理信息 set proxy 有效时的初始登录名


另请参见 文档 《参考手册:构件块》的 4 章 “表达式、标识符和通配符”中的 “标 识符” .


命令 create schema, drop view, select, update.

系统过程 sp_depends, sp_help, sp_helptext, sp_rename.




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------