提供7*24专业Sybase数据库远程及现场技术支持,Sybase ASE及Sybase SQL Anywhere数据库修复服务,
请联系电话: (微信),QQ: 289965371!
We supply technical support for Sybase ASE and Sybase SQL Anywhere, also have many years of experience in recovering data from damanged Sybase devices.
Please contact us:
Phone:
Wechat: 13811580958
QQ: 289965371 联系我们获取数据库技术支持!
Email: 289965371@qq.com
扫描下方微信,联系我们:
扫描雨翰数据恢复官方微信获取专业数据库恢复服务

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://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. 实用程序指南

 


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

创建和执行存储过程

可以在当前数据库中创建过程。

Adaptive Server 15.5 之前的版本中,在创建过程时所有被引用对象都 必须在需要时存在。延迟名称解析功能允许在最初执行存储过程时解析 对象,但用户创建的数据类型对象除外。

延迟名称解析使用在服务级执行的 deferred name resolution 配置参数或在 连接级执行的 set deferred_name_resolution 参数。

缺省行为是在执行前解析对象。必须使用配置选项 deferred name resolution

set 参数来显式指示延迟名称解析。

请参见 《系统管理指南第一卷》和 《参考手册:命令》。

发出 create procedure 的权限在缺省情况下将授予数据库所有者,获得授 权的所有者可将此权限移交给其他用户。


使用延迟名称解析


在此功能有效 (通过使用 set 选项 deferred_name_resolution 或通过使用 配置参数 deferred name resolution 设为全局有效)时,过程内的对象将在 执行时而不是在创建时进行解析。利用此选项,您可以创建过程来引用 在创建过程时不存在的对象。

例如,使用 deferred_name_resolution 可以创建一个引用不存在的表的过 程。以下示例尝试在不使用 deferred_name_resolution 的情况下创建一个 过程:

select * from non_existing_table

-----------

error message


Msg 208, Level 16, State 1:

Line 1:

non_existing_table not found.Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

不过,如果使用此选项,即可创建过程,而不会因缺少对象而引发错误。

set deferred_resolution_on

-----------------

create proc p as select * from non_existing_table

-----------------


image

注释 deferred_name_resolution 不在执行时解析用户定义的数据类型。 此类数据类型在创建时解析,因此如果解析失败,将无法创建过程。

image


在创建时解析对象意味着在执行时 (而不是创建时)也会引发对象解 析错误。


参数


au_info Ringer, Anne


参数是存储过程的参数。在 create procedure 语句中可选择性地声明一个 或多个参数。在执行过程时,用户必须提供在 create procedure 语句中指 定的每个参数的值。

参数名前面必须带有 @ 符号且必须符合标识符的规则,请参见 11 页 的 “标识符 。参数名局限于创建它们的过程中;同一参数名可用于其 它过程。把含标点符号的任何参数值 (如用数据库名或所有者名限定的 对象名)用单引号或引号引起来。参数名 (包括 @ 符号)最长为 255 个 字节。

必须给定参数的系统数据类型 ( textunitext image 除外)或用户定 义的数据类型,和 (如果数据类型需要)长度或精度和标度 (在小括 号中)。

以下是 pubs2 数据库的一个存储过程。给出作者的姓和名后,该过程将 显示出该作者所撰写的任何书的书名和出版社的名称。

create proc au_info @lastname varchar(40),

@firstname varchar(20) as

select au_lname, au_fname, title, pub_name from authors, titles, publishers, titleauthor where au_fname = @firstname

and au_lname = @lastname

and authors.au_id = titleauthor.au_id

and titles.title_id = titleauthor.title_id and titles.pub_id = publishers.pub_id

现在,执行 au_info

au_lname au_fname title pub_name

-------- -------- --------------------- ----------

Ringer Anne The Gourmet Microwave Binnet & Hardley Ringer Anne Is Anger the Enemy? New Age Books

(2 rows affected, return status = 0)


下列存储过程查询系统表。指定一个表名作为参数,则该过程将显示该 表名、索引名和索引 ID

create proc showind @table varchar(30) as select table_name = sysobjects.name, index_name = sysindexes.name, index_id = indid from sysindexes, sysobjects

where sysobjects.name = @table and sysobjects.id = sysindexes.id

添加列标题 (如 table_name)以增强结果的可读性。以下是执行此存储 过程的可接受的语法形式:

execute showind titles exec showind titles

execute showind @table = titles

execute GATEWAY.pubs2.dbo.showind titles showind titles

只要语句是批处理中的唯一语句或第一条语句,最后一种语法形式 (没 有 exec execute)就可接受。

以下是给定 titles 作为参数时,在 pubs2 数据库中执行 showind 的结果:

table_name

index_name

index_id

----------

----------

----------

titles

titleidind

0

titles

titleind

2


(2 rows affected, return status = 0)

如果以 “@parameter = value ”的形式提供参数,则可以以任意顺序提 供它们。否则,必须以参数的 create procedure 语句的顺序提供它们。如 果以 “@parameter = value ”的形式提供了一个值,则以这种方式提供 所有后续参数。

此过程将显示 salesdetail 表的 qty 列的数据类型:

create procedure showtype @tabname varchar(18),

@colname varchar(18) as

select syscolumns.name, syscolumns.length, systypes.name

from syscolumns, systypes, sysobjects where sysobjects.id = syscolumns.id and @tabname = sysobjects.name

and @colname = syscolumns.name

and syscolumns.type = systypes.type


如果 @tabname @colname 按名称指定,则执行此过程时可从 create procedure 语句中以不同的顺序给出:

exec showtype

@colname = qty , @tabname = salesdetail

在任何使用值表达式的存储过程中都可使用 case 表达式。以下示例检查

titles 表中所有书的销售记录:

create proc booksales @titleid tid as

select title, total_sales, case

when total_sales != null then "Books sold"

when total_sales = null then "Book sales not available" end

from titles

where @titleid = title_id

例如:

booksales MC2222

title total_sales

------------------------ -----------

Silicon Valley Gastronomic Treats 2032 Books sold (1 row affected)


缺省参数


可以在 create procedure 语句中为参数指定缺省值。该值可以是任意常 量,如果用户没有指定,它将作为该过程的参数。

以下是一个显示所有作者名字的过程,他们所写的书由以参数形式给定 的出版者出版。如果没有提供出版者姓名,该过程将显示由 Algodata Infosystems 出版的书的作者。

create proc pub_info

@pubname varchar(40) = "Algodata Infosystems" as select au_lname, au_fname, pub_name

from authors a, publishers p, titles t, titleauthor ta where @pubname = p.pub_name

and a.au_id = ta.au_id

and t.title_id = ta.title_id and t.pub_id = p.pub_id


如果缺省值是含有嵌入空格或标点符号的字符串,则它必须用单引号或 双引号引起来。

执行 pub_info 时,可以给出任意出版社的名称作为参数值。如果没有提 供任何参数, Adaptive Server 将使用缺省值 Algodata Infosystems

exec pub_info

au_lname

au_fname

pub_name

--------------

------------

--------------------

Green

Marjorie

Algodata Infosystems

Bennet

Abraham

Algodata Infosystems

O’Leary

Michael

Algodata

Infosystems

MacFeather

Stearns

Algodata

Infosystems

Straight

Dick

Algodata

Infosystems

Carson

Cheryl

Algodata

Infosystems

Dull

Ann

Algodata

Infosystems

Hunter

Sheryl

Algodata

Infosystems

Locksley

Chastity

Algodata

Infosystems

(9 rows affected, return status = 0)

此过程 showind2 将 “titles”指派为 @ table 参数的缺省值:

create proc showind2

@table varchar(30) = titles as select table_name = sysobjects.name,

index_name = sysindexes.name, index_id = indid from sysindexes, sysobjects

where sysobjects.name = @table and sysobjects.id = sysindexes.id

列标题 (如 table_name)阐明了结果显示。以下是由 showind2 显示的

authors 表的内容:

showind2 authors

table_name index_name index_id

----------- ------------- ---------

authors auidind 1

authors aunmind 2


(2 rows affected, return status = 0)

如果用户没有提供任何值, Adaptive Server 将使用缺省值 titles

showind2

table_name index_name index_id

----------- ----------- ---------

titles titleidind 1

titles titleind 2


(2 rows affected, return status =0)

如果需要参数却没有提供,且 create procedure 语句没有提供缺省值,则

Adaptive Server 将显示一条错误消息,其中列出了过程所需的参数。


在存储过程中使用缺省参数

如果您创建使用参数缺省值的存储过程,但用户发出该存储过程时误拼 了参数名,则 Adaptive Server 将使用缺省值执行该存储过程并且不发出 错误消息例如,如果创建以下过程:

create procedure test @x int = 1 as select @x

它返回以下内容:

exec test @x = 2 go

----------------

2

但是,如果您向此存储过程传递了一个不正确的参数,则它会返回不正 确的结果集,但并不发出错误消息:

exec test @z = 4 go

-----------

1

(1 row affected) (return status = 0)


NULL 作为缺省参数


可以在 create procedure 语句中将空值声明为个别参数的缺省值:

create procedure procedure_name

@param datatype [ = null ]

[, @param datatype [ = null ]]...

如果用户没有提供参数, Adaptive Server 执行存储过程时不显示错误 信息。

过程定义通过检查参数值是否为空,可以指定在用户未提供参数时要进 行的操作。下面是一个示例:

create procedure showind3

@table varchar(30) = null as


if @table is null

print "Please give a table name." else

select table_name = sysobjects.name, index_name = sysindexes.name, index_id = indid

from sysindexes, sysobjects where sysobjects.name = @table and sysobjects.id = sysindexes.id

如果用户未给定参数, Adaptive Server 将把来自过程的信息输出到屏 幕上。

有关将缺省值设置为空的其它示例,请用 sp_helptext 检查系统过程的源 文本。


缺省参数中的通配符


如果过程使用带有关键字 like 的参数,则缺省值可包括通配符 %_[ ]

[^]

例如,如果用户未提供参数,则可以修改 showind 以显示有关系统表的 信息,如下:

create procedure showind4

@table varchar(30) = "sys%" as select table_name = sysobjects.name,

index_name = sysindexes.name, index_id = indid

from sysindexes, sysobjects

where sysobjects.name like @table and sysobjects.id = sysindexes.id


使用多个参数


以下是 au_info 的变量,在两个参数中,该变量均使用带通配符的缺省 值:

create proc au_info2

@lastname varchar(30) = "D%",

@firstname varchar(18) = "%" as

select au_lname, au_fname, title, pub_name from authors, titles, publishers, titleauthor where au_fname like @firstname

and au_lname like @lastname



au_info2

and authors.au_id = titleauthor.au_id

and titles.title_id = titleauthor.title_id and titles.pub_id = publishers.pub_id

如果执行不带参数的 au_info2,则将显示所有姓氏以 “D”开头的作者:

au_lname au_fname title pub_name

-------- ------- ------------------------- -------------

Dull Ann Secrets of Silicon Valley Algodata Infosystems DeFrance Michel The Gourmet Microwave Binnet & Hardley


(2 rows affected)


au_info2 Ringer


如果参数有缺省值,则这些参数在执行时可被忽略,并从最后的参数开 始执行。不能跳过任何参数,除非为其提供的缺省值是 NULL


image

注释 如果以 @parameter = value 的形式提供参数值,则可以按任意顺 序提供参数值。也可省略已经为其提供缺省值的参数。如果以

@parameter = value 的形式提供了一个值,则以这种方式提供所有后续 参数。

image


下面是一个两个参数的缺省值都已定义后省略第二个参数的示例,可以 找到姓氏为 “Ringer”的所有作者的书籍及出版社,如下:

au_lname

au_fname

title

Pub_name

--------

--------

---------------------

------------

Ringer

Anne

The Gourmet Microwave

Binnet & Hardley

Ringer

Anne

Is Anger the Enemy?

New Age Books

Ringer

Albert

Is Anger the Enemy?

New Age Books

Ringer

Albert

Life Without Fear

New Age Books

如果用户执行存储过程且指定的参数数目超过过程所期望的数目, Adaptive Server 将忽略多余的参数。例如,针对 pubs2 数据库, sp_helplog 显示如下内容:

sp_helplog

In database ‘pubs2’, the log starts on device ‘pubs2dat’.

如果错误地添加了某些无意义的参数, sp_helplog 的输出相同:

sp_helplog one, two, three

In database ‘pubs2’, the log starts on device ‘pubs2dat’.


请记住 SQL 是形式自由的语言。没有规定每一行中的单词数量或者必 须换行的地方。如果在执行系统过程后执行命令, Adaptive Server 将尝 试执行系统过,然后再执行命令。例如,如果执行:

sp_help checkpoint

Adaptive Server 将返回 sp_help 的输出,然后运行 checkpoint 命令。如果 对过程参数使用分隔标识符,会产生意外结果。


在存储过程中使用大对象 textunitext image 数据类型

Adaptive Server 15.7 版和更高版本中,可以为本地变量声明大对象 (LOB) textimage unitext 数据类型,并将该变量作为输入参数传递给 存储过程。在 15.7 之前的版本中,存储过程中的 textimage unitext 数据的命名参数不能超过当前页大小:248 16KB

以下示例在存储过程中使用 LOB 数据类型:

1 假设创建 table_1

create table t1 (a1 int, a2 text) insert into t1 values(1, "aaaa") insert into t1 values(2, "bbbb") insert into t1 values(3, "cccc")

2 LOB 局部变量用作参数来创建存储过程:

create procedure my_procedure @loc text as select @loc

3 声明局部变量并执行存储过程。

declare @a text

select @a = a2 from t1 where a1 = 3 exec my_procedure @a

---------------------------

cccc

有一定的限制。 LOB 数据类型:

不能用作存储过程的输出参数

不能用在使用 convert() 函数的数据类型转换中

不支持用于复制


过程组


create procedure execute 语句中,过程名后可选的分号和整数可以将 同名的过程组成一组,以便能用一条 drop procedure 语句一起删除它们。

同一应用程序中使用的过程经常用此方法编组。例如,可以创建一系列 过程,名称分别为 orders;1orders;2,依次类推。若要删除整个组,可 使用:

drop proc orders

用向其名字后附加分号和数字的方法将过程分组后,就不能单个删除它 们。例如,以下语句是不允许的:

drop proc orders;2

要在已评估的配置中运行 Adaptive Server,则禁止过程分组。这可以确 保每个存储过程都拥有唯一的对象标识符并可被单个删除。若要禁止过 程分组,系统安全员必须重新设置配置参数 allow procedure grouping。请 参见 《系统管理指南第一卷》中的第 5 章 “设置配置参数”。


create procedure 中使用 with recompile

create procedure 语句中,可选子句 with recompile 紧邻在 SQL 语句之 前。它指示 Adaptive Server 不为该过程保存计划。每次执行过程时都要 创建一个新计划。

如果没有 with recompile,则 Adaptive Server 存储其创建的执行计划。此 执行计划通常会满足要求。然而,如果提供给后续执行的数据或参数值 发生变化,可能导致 Adaptive Server 创建一个与过程初次执行时创建的 计划不同的执行计划。这种情况下, Adaptive Server 需要一个新的执行 计划。

当您认为需要一个新计划时,请在 create procedure 语句中使用 with recompile。请参见 《参考手册:命令》。


使用 with recompile


Adaptive Server 12.5 版的文档的指出,如果在存储过程的各次执行中操 作的数据不是一致的,则应当使用 with recompile 创建存储过程,这样每 次执行时 Adaptive Server 都会重新编译存储过程,而不是使用以前执行 中的计划。在 Adaptive Server 15.0 版中使用此选项更为重要,而随着在 15.0.2 版及更高版本中引入延迟编译,这一点已变得至关重要。


如果存储过程的多个副本包括在存储过程高速缓存中,则使用以前执行 中的查询计划的问题可能会因存储过程的同时执行而加重。如果存储过 程的不执行使用了差别很大的数据集,则会在存储高速缓存中产生存储 过程的两个或多个副本,其中每个副本使用的计划也有很大差别。存储 过程的后续行将使用按照最近使用最多的 (MRU) 算法选择出的副本。

此问题可在同一存储过程的不同执行时导致性能的大幅度波动。在 Adaptive Server 12.5 中可能会出现同一问题,但由于过程是使用计划可 能相同的幻数进行优化的,因此很少会出现性能的大幅度波动。


故障排除


在解决存储过程的性能问题时,应使用 with recompile 确保在测试期间重 新编译所使用的每个存储过程,这样在测试期间就不会使用以前编译的 任何计划。


execute 中使用 with recompile

execute 语句中,可选子句 with recompile 在所有参数之后。它指示

Adaptive Server 编译一个用于后续执行的新计划。

执行过程时,如果数据已发生很大更改,或者您以不规则方式提供参数

(即,如果您有理由相信与过程存储在一起的计划可能不是此次执行的 最优计),请使用 with recompile

多次使用 execute procedure with recompile 可能对过程高速缓存性能有不 利影响。由于每次使用 with recompile 都会生成新计划,所以如果高速 缓存用于新计划的空间不足,则有用的性能计划可能在高速缓存中老 化。

如果在 create procedure 语句中使用 select *,则过程不会选取任何已添加 到表的新列 (即使将 with recompile 选项用于 execute)。您必须删除该过 程并重新创建它。


过程中的嵌套过程


当一个存储过程或触发器调用另一存储过程或触发器时,就会发生嵌 套。嵌套级别在被调用的过程或触发器开始执行时会递增,而在其执行 结束时递。创建高速缓存的语句时,嵌套级别也会增加一级。超过 16 层的嵌套将导致过程失败。当前的嵌套级别存储在 @@nestlevel 全局变 量中。


可用过程名或变量名替换真正的过程名来调用其它过程。例如:

create procedure test1 @proc_name varchar(30) as exec @proc_name


使用存储过程的临时表

可创建并使用存储过程中的临时表,但临时表只在创建它的存储过程的 持续期间内存在。过程完成后, Adaptive Server 将自动删除临时表。单 个过程能够:

创建临时表

插入、更新或删除数据

在临时表上运行查询

调用引用临时表的其它过程 因为要创建引用临时表的过程,临时表必须存在,所以要遵循以下步骤:

1 使用 create table 语句或 select into 语句创建临时表。例如:

create table #tempstores

(stor_id char(4), amount money)


image

注释 使用 set deferred_name_resolution 时无需此步骤;请参见 498 页的 “使用延迟名称解析

image

2 创建访问临时表的过程 (而非创建它的过程)。

create procedure inv_amounts as

select stor_id, "Total Due" = sum(amount) from #tempstores

group by stor_id

3 删除临时表:

drop table #tempstores

如果使用 deferred_name_resolution,则无需此步骤。

4 创建一个过程,该过程创建表并调用在第 2 步中创建的过程:

create procedure inv_proc as create table #tempstores (stor_id char(4), amount money)


运行 inv_proc 过程时,它创建该表,但该表只在该过程的执行期间 存在。试着将值插入 #tempstores 表或运行 inv_amounts 过程:

insert #tempstores

select stor_id, sum(qty*(100-discount)/100*price) from salesdetail, titles

where salesdetail.title_id = titles.title_id group by stor_id, salesdetail.title_id

exec inv_amounts

因为 #tempstores 表不再存在,所以无法完成此操作。

也可在存储过程中使用 create table tempdb.. tablename ... 创建不带 # 前缀的 临时表。过程完成后这些表不消失,所以它们可被独立过程引用。按以 上步骤创建这些表。


在存储过程中设置选项

几乎所有 set 命令选项都可以在存储过程中使用。在过程的执行期间 set 选项始终有效,在过程结束时大多数选项都会恢复为先前的设置。只有 dateformatdatefirstlanguage role 选项不还原到其先前的设置。

然而,如果使用要求用户为对象所有者的 set 选项 (如 identity_insert), 则不是对象所有者的用户将无法执行存储过程。


查询优化设置


存储过程的参数


可以使用 set export_options on 导出优化设置,如 set plan optgoal set plan optcriteria。优化设置不是存储过程的本地设置;它们适用于整个用 户会话。


image

注释 缺省情况下,为登录触发器启用 set export_options

image


存储过程的参数的最大数目为 2048。但是,如果您执行具有大量参数 的过程,系统性能可能会下降,因为查询处理引擎必须处理所有参数并 且向内存制参数值和从内存获取参数值。Sybase 建议您首先测试所编写 的包含大量参数的所有存储过程,然后在生产环境中实现它们。


表达式、变量和参数的长度

表达式、变量和传递给存储过程的参数最多为 16384 字节 (16K),对任 何大小的页都一样。它可以是字符,也可以是二进制数据。无须使用 writetext 命令就可以将最大大小的变量、文字插入到文本列。

Adaptive Server 的某些早期版本中,存储过程的表达式、变量和参数的 最大大小为 255 字节。

因为页的最大大小增加,所以为受更小最大长度限制的 Adaptive Server

早期版本所写的脚本或存储过程现在可能会返回较大的字符串值。

因为值变大,所以 Adaptive Server 可能要截断字符串,或者如果字符串 保存在另一变量中或被插入到列或字符串中,字符串可能溢出。

如果要修改现有表的列以增加字符列的长度,则必须修改使用这些列的 数据的所有存储过程以反映新的长度。

select datalength(replicate("x", 500)), datalength("abcdefgh....255 byte long string.."+ "xxyyzz ... another 255 byte long string")

----------- ----------- 255 255


执行存储过程


存储过程可以延时执行,也可以远程执行。


延时执行过程


waitfor 命令将存储过程的执行延迟到指定的时间或延迟指定的时间段。 例如,半小时后执行过程 testproc

begin

waitfor delay "0:30:00" exec testproc

end

发出 waitfor 命令后,在到达指定时间或发生指定事件前,不能使用与

Adaptive Server 的该连接。


远程执行过程


可以在本地 Adaptive Server 上执行远程 Adaptive Server 的过程。两个服 务器都正确配置后,只要把服务器名作为标识符的一部分就可以执行远 程 Adaptive Server 上的任何过程。例如,若要在服务器 GATEWAY 上执 行名为 remoteproc 的过程,请输入:

exec gateway.remotedb.dbo.remoteproc

以下示例执行 GATEWAY 服务器上的 pubs2 数据库中的 namelist 过程:

execute gateway.pubs2..namelist gateway.pubs2.dbo.namelist

exec gateway...namelist

仅当 pubs2 是缺省数据库时,最后的示例才生效。

请参见 《系统管理指南第一卷》中的第 15 章 “管理远程服务器”。可 以将批处理或含有远程过程的 execute 语句中的一个或多个值作为参数 传递给远程过程。来自远程 Adaptive Server 的结果显示在本地终端上。

使用过程的返回状态可捕获和传输有关过程执行状态的信息消息。请参 见 513 页的 “返回状态


image

警告! 如果不启用组件集成服务, Adaptive Server 将不把远程过程调用 (RPCs) 作为事务的一部分。因此,如果把 RPC 作为事务的一部分来执 行然后回退该事务,Adaptive Server 不回退 RPC 导致的任何改变。如果 启用了组件集成服务,则通过 set transactional rpc set cis rpc handling 使 用事务性 RPC。请参见 《参考手册:命令》。

image




--------------------------------------华丽的分割线-------------------------------------------------------------------------

Sybase SQL Anywhere数据库恢复工具ReadASADB:

之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。
此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。

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,16.x,17.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使用介绍

Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景

各种误操作:

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

Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:

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
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back


-------------------------------------------------------------------------------------------

Sybase ASE数据库恢复工具READSYBDEVICE:

一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!
能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。

Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:

  1. 被勒索病毒加密数据文件及备份文件情况下的恢复;
  2. 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
  3. 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
  4. delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
  5. 各种Sybase内部系统表损坏、索引错误的修复;
  6. master数据库损坏而无法正常运行情况下的恢复;
  7. Sybase数据库被标记为可疑,不可用等情况的恢复;
  8. Sybase数据库中数据文件内部出现坏块情况下的恢复;
  9. Sybase数据库无数据文件但有日志文件的情况下的恢复;
  10. Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
  11. Sybase数据文件被误删除情况下的碎片提取恢复;
  12. 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
  13. 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
  14. Sybase数据库还原数据库出现失败情况下的恢复;
  15. Sybase数据库只剩下损坏的备份文件情况下的恢复。

Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:

Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.x


-------------------------------------------------------------------------------------------

SQL Server数据库恢复工具SQLRescue:

一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!
能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。

SQL Server数据库恢复工具SQLRescue的主要功能:

  1. 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
  2. 断电导致数据库文件损坏情况下的恢复;
  3. 硬盘坏道造成数据库损坏情况下的恢复;
  4. 数据文件内部存在坏页情况下的恢复;
  5. 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
  6. 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
  7. 无法读取并闩锁页sysindexes失败情况下的修复;
  8. 数据文件被误删除情况下的碎片提取恢复;
  9. 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
  10. master数据库损坏而无法正常运行情况下的恢复;
  11. 数据文件无法附加情况下的数据恢复;
  12. 数据库被标记为可疑,质疑,不可用等情况的恢复;
  13. 数据库sysobjects等系统表损坏情况下的恢复;
  14. 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
  15. 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
  16. 数据库被误格式化等情况下的数据库恢复;
  17. 日志收缩造成数据库损坏情况下的恢复;
  18. 仅剩损坏的备份文件情况下的恢复。

SQL Server数据库恢复工具SQLRescue技术特点:

只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。
  1. 从数据文件中直接恢复数据
  2. 不能附加时直接恢复数据并生成新的数据库
  3. 系统表损坏的数据库修复
  4. 快速修复SQL 823错误、连接中断错误

SQL Server数据库恢复工具SQLRescue支持的版本:

Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------