sybase游标存储过程
A. 如何查看sybase存储过程的内容
使用sybase central来查看。在表名上点右键,选择属性,点“依赖性”按钮,在引用者页面中,下拉列表选择“过程”,就可以看到引用该表的所有存储过程了。
B. sybase存储过程中怎么调用存储过程
1.begin tran
.....(sql)
if @@error=0
commit
else
rollback
2.exec 另一个存储过程名 参数...
C. sybase12.5存储过程如何定义结构体
sybase不能自定义函数。。。
D. sybase 存储过程
因为你在存储过程中使用的是变量,而没有使用输入参数,如果将你的这个变量声明成输入参数,就可以实现了。create proc data(@username varchar(20)) as . begin ..... end.
E. 请问如何保存sybase系统过程,分类存储过程的结果
目前没有直接可行的办法,只能照搬并修改存储过程。
以sp_databases为例,在master数据库中的“扩展存储过程”中找到sp_databases过程,将全部代码COPY出来,新建一个新的存储过程。
查看代码发现它是将数据库的信息写到临时表#databases中,将其修改成为写到固定表data(删除建立临时表语句,建立固定表,修改insert语句),需要时调用该存储过程,在从data表中即可得到所需的信息。
F. 如何快速导出SYBASE的存储过程
方法1:使用外部工具; 方法2:自己编写代码 -- 效果、方便性差一些 - 定义游标,对于sys.objects中type='P'的对象(即所有过程),遍历 - 对于每个过程,使用helpText 来得到脚本。
G. 在DataStage中怎么调用Sybase IQ数据库中的存储过程最好能有图解。
虽然具体没有用datastage连接sybase IQ数据库,但按照以往连接DB2、sqlserver、ORACLE这些数据库调用存储过程的经验来看,估计需要配置ODBC才行了。
直接使用sybase stage一般只能读取表和视图,而不能读取存储过程。
先在datastage服务端配置了sybase IQ数据库连接的ODBC,然后在datastage菜单栏:
Import —— Table Definitions —— ODBC Table Definitions。
选择ODBC的名字,输入数据库用户和密码,就能显示存储过程出来了。
H. 请教sybase的存储过程中如何实现动态sql
1.EXEC的使用
EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。
下面先使用EXEC演示一个例子,代码1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要为重用执行计划提供更好的支持。
为了和EXEC作一个鲜明的对比,我们看看如果用代码1的代码,把EXEC换成sp_executesql,看看是否得到我们所期望的结果
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql
I. 讲解Sybase存储过程的建立和使用
存储过程的特点
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务 存储租缺过程由SQL语句和流程控制语句组成 它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理 指示调用成功或失败;返回若干个参数值给调用过程或批处理 为调用者提供动态结果;在远程SQL Server中运行等
存储过程的性能特点如下:
·存储过程是预编译过的 这就意味着它与普通的SQL语句或批处理的SQL语句不同 当首次运行一个存储过程时 SQL Server的查询处理器对其进行分析 在排除了语法错误之后形成存储在系统中的可执行方案 由于查询处理的大部分工作已经完成 所以存储过程执行速度很快
·存储过程和待处理的数据都放在同一台运行SQL Server的计算机上 使用存储过程查询当地的数据 效率自然很高
·存储过程一般多由Client端通过存储过程的名字进行调用 即跨网传送的只是存储过程的名字及少量的参数(如果有的话) 而不是构成存储过程的许多SQL语句 因此可以减少网络传输量 加快系统响应速度
·存储过程还有着如同C语言子函数那样的被调用和返回值弊搭辩的方便特性
所以 存储过程大大增强了SQL语言的功能 效率和灵活性 掌握和应用好存储过程 对进一步发挥Sybase数据库系统的强大功能有着重要的意义
存储过程的语法规则
建立存储过程的语法规则为:
CREATEPROCere[owner ]procerename[;number] [[(]@parameter_namedatatype[=default][OUTput] [ @parameter_namedatatype[=default][OUTput]] [)]] [WITHREPILE] ASSQL_statements
使用存储过程的语法规则为:
[EXECute][@return status=] [[[server ]database ]owner ]procerename[;number] [[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput] [ [@parameter_name=]value|[@parameter_name=]@variable[OUTput] ]] [WITHREPILE]
[page]下面简要介绍这两个命令的常用选项以及建立和使用存储过程的要点 关于选项的更为详细的说明请参考有关手册
·[[[server ]database ]owner ]procere_name:存储过程的名字
·@parameter_name datatype[=default][OUTput]:形式参数(形参)的名称 类型 df ault是赋予的缺省值(可选) OUTput指定本参数为输出参数(可选) 形参是存储过程中的自变量 可以有多个 名字必须以@打头 最长 个字符
·SQL_statements:定义存储过程功能的SQL语句
·@return_status:接受存储过程返回状态值的变量
·[@parameter_name=]value:实际参数(实参) @parameter_name为实参的名称(可选) 如果某个实参以@parameter_name=value提供 那么随后的实参也都要采用这一形式提供
·[@parameter_name=]@varialbe[OUTput]:将变量@varialbe中的值作为实参传递给形参@parameter_name(可选) 如果变量@varialbe是用来接受返回的参数值 则选项OUTput不可缺少
存储过程的建立和使用 我们将通过几个例子进行枝配介绍
假设有一个用下述语句生成的技能工资表RS LS GZ JiNeng:
create table RS_LS_GZ_JiNeng /*技能工资表*/
(GeRen_id char( ) /*个人代码 */
RiQi *** alldatetime /*执行日期 */
YuanYin_id char( ) null /*变动原因代码 */
JinE *** allmoney) /*技能工资金额 */
该表存储着某单位员工多年来技能工资的历史档案
例 如果要查询全体员工的技能工资变动历史 则可先建立一个存储过程p RsGz JiNeg All:
createprocerep_RsGz_JiNeng_Allas select* fromRS_LS_GZ_JiNeng orderbyGeRenid RiQi
然后用批处理语句调用存储过程p_RsGz_JiNeng_All进行查询:
execute p_RsGz_JiNeng_All
本例只显示查询到的数据 无输入 输出参量 是最简单的一个存储过程
例 如果要查询某人技能工资的变动历史 可建立另一个存储过程p_RsGz_JiNeng:
createprocerep_RsGz_JiNeng@c_GeRenIdchar( ) as select*fromRS_LS_GZ_JiNeng whereGeRen_id=@c_GeRenId orderbyRiQi
之后用批处理语句调用存储过程p_Rs_Gz_JiNeng进行查询:
declare @GeRenId char( )
select @GeRenId= /*设要查询员工的个人代码为 */
execute p_RsGz_JeNeng @c_GeRenId=@GeRenId
存储过程p_RsGz_JiNeng中定义了一个形参@c_GeRenId 是字符型变量 在调用该过程的批处理中 既可以用具体的值也可以用变量作为实参 用变量作实参(如本例)时 必须用del are语句加以说明 值得注意的是 在批处理的调用过程语句中 @c_GeRenId=@GeRenId中的@ c_GeRenId是存储过程p_RsGz_JiNeng中的形参名 不是批处理中的变量 所以不能将它列入d eclare语句的变量单中
例 如果要计算当月工资 就必须从工资历史中查出员工距离当前最近的一次技能工资变动的结果:
createprocerep_RsGz_JiNeng_Slt (@c_GeRenIdchar( ) @ *** _JinE *** allmoneyoutput) as select@ *** _JinE=JinE fromRS_LS_GZ_JiNeng whereRiQi=(selectmax(RiQi) fromRS_LS_GZ_JiNeng
where GeRenid=@c GeRenId)/*找出历史记录中距离当前最近的日期*/
调用存储过程p_RsGz_JiNeng_Slt进行查询:
declare@GeRenIdchar( ) @JinE *** allmoney select@GeRenid= /*设要查询员工的个人代码为 */ select@JinE= executep_RsGz_JiNeng_slt@c_GeRenId=@GeRenId @ *** _JinE=@JinEoutput
这里 变量 @JinE用来存储过程形参@ *** _JinE传回的金额 在调用过程语句中 @ *** _JiE = @JinE output中的output不可省略 否则 变量@JinE将得不到形参传回的数值而始终为零(等于初值)
例 查到了个人代码为 员工的技能工资就显示其历史纪录 查不到则显示一条出错信息
createprocerep_RsGz_JiNeng_Rtn @c_GeRenIdchar( ) as declare@ErrCode *** allint select@ErrCode= ifexists(select*fromRS LS GZ JiNeng whereGeRenid=@c GeRenId) begin select* fromRS_LS_GZ_JiNeng whrerGeRen_id=@c_GeRenId orderbyRiQi return@ErrCodE end eslE begin select@ErrCode= return@ErrCodE end
调用存储过程p_RsGz_JiNeng_Rtn:
declare@GeRenIdchar( ) @RtnCode *** allint select@GeRenId= select@RtnCode= execute@RtnCode=p_RsGz_JiNeng_Rtn@c_GeRenId=@GeRenId if@RtnCode= print Nothisone!
存储过程p_RsGz_JiNeng_Rtn向调用者返回一个存储在变量@ErrCode里的值 这个值被称为状态值 它向调用者反映存储过程执行的成败状态 在本例中 如果查不到指定员工技能工资的任何记录时 就认为 查无此人 返回出错状态值 否则 返回成功状态值
调用过程的批处理语句使用变量@RtnCode存储返回的状态值 一旦检出存储过程p_RsG_ JiNeng_Rtn返回了错误标志(@RtnCode= ) 就显示一条信息 No this one! [page]
小结
上述四个例子简要介绍了存储过程常用的几种形式 从中我们已经可以领略到它的编程特色以及使用上的灵活性和方便性
lishixin/Article/program/Oracle/201311/17494
J. 如何查看sybase存储过程的内容
1 在isql(或SQL Advantage)中执行: sp_helptext 存储过程名 可以查看存储过程的内容。 2 在 SQL CENTRAL里连接你的服务器用sa登录,点击你的用户数据库,展开树就有 Stored proceres,所有的存储过程就在里面。