当前位置:首页 » 存储配置 » sybase存储过程调试

sybase存储过程调试

发布时间: 2023-12-01 20:36:42

Ⅰ sybase存储过程中怎么调用存储过程

1.begin tran
.....(sql)
if @@error=0
commit
else
rollback
2.exec 另一个存储过程名 参数...

Ⅱ 请教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

Ⅲ sybase 存储过程

因为你在存储过程中使用的是变量,而没有使用输入参数,如果将你的这个变量声明成输入参数,就可以实现了。create proc data(@username varchar(20)) as . begin ..... end.

Ⅳ 讲解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

Ⅳ sybase 数据库的存储过程怎么写

//给你个举个列,html控件数组的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>

Ⅵ 如何获取Sybase存储过程返回值

我的这个例子就返回了1个结果集。为了使问题表达更加清楚,这些是我简化了的代码,并用此代码进行了调试。并且总结出了问题的规律:先rdr.read(),如果读到了,则后面的ret必然等于0,否则可以拿到返回值。

linux环境下如何查看sybase数据库中有哪些表有哪些存储过程如何把sybase数据库导出

可以用以下SQL语句查找存储过程:

selectdistinctname
fromsysobjects
wheretype='P'

如何查看SYBASE数据库中的所有表名?看如下SQL语句:

="U";

如何把sybase数据库导出,使用如下:

mpdatabasefromsybase1to"/mysybase.mp";

sybase1是你的数据库名,/mysybase.mp表示linux根目录下,保存为mysybase.mp。

Ⅷ 如何查看sybase存储过程的内容

使用sybase central来查看。在表名上点右键,选择属性,点“依赖性”按钮,在引用者页面中,下拉列表选择“过程”,就可以看到引用该表的所有存储过程了。

Ⅸ JDBC调用Sybase存储过程,结果集总是无法返回,该怎么处理

JDBC调用Sybase存储过程,结果集总是无法返回!
java代码部分如下:
String sproc = "{ call zhouxiaobotest2(?,?,?,?)} ";
CommonDAO = null;
try {
= new CommonDAO(jndi);
Connection connect = .getConn();

//得到总数
rowNum = PageDiv.getCount(countSql.toString(), );

//设置分页信息
pageBean.setPageInfo(rowNum, pageSize);

// 获取CallableStatement语句:
CallableStatement mStatement = connect.prepareCall(sproc,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

// 传入输入参数和注册输出参数
mStatement.setString(1,sql.toString());
mStatement.setInt(2, 10);
mStatement.setInt(3, 10);
mStatement.setInt(4, 5000);

// 执行存储过程
ResultSet rs = null;
mStatement.execute();
rs = mStatement.getResultSet();

catch (Exception ex) {
ex.printStackTrace();
logger.warn(sql.toString());
} finally {
.destroy();
= null;
sproc = null;
}

存储过程如下:
create procere zhouxiaobotest @qry varchar(16384),@ipage int, @num int,@maxpages int
as
/*@qry SQL语句, @ipage 页数, @num 每页记录条数, @maxpages 最大查询页数 */
begin

declare @execsql varchar(16384)

set @execsql = " select USER_NAME from TBL_USER "

execute (@execsql)

end

create procere zhouxiaobotest2 @qry varchar(16384),@ipage int, @num int,@maxpages int
as
/*@qry SQL语句, @ipage 页数, @num 每页记录条数, @maxpages 最大查询页数 */
begin

select USER_NAME from TBL_USER

end

现在我的问题是调用存储过程zhouxiaobotest,mStatement.execute()始终是false;而调用zhouxiaobotest2 mStatement.execute()就是true,能得到结果集。我想知道如何修改程序使我能够调用zhouxiaobotest取得结果集(之前调试程序运行没有抛出任何异常,而且控制台运行存储过程也都正确)

热点内容
python外包 发布:2024-11-29 06:49:11 浏览:424
怎么用安卓手机查苹果的序列号 发布:2024-11-29 06:21:08 浏览:507
r11s原始密码是多少 发布:2024-11-29 05:52:20 浏览:79
c语言枚举法 发布:2024-11-29 05:50:58 浏览:125
大数据系统如何配置 发布:2024-11-29 05:48:44 浏览:89
连战访问西安小学 发布:2024-11-29 05:45:03 浏览:316
怎么编译原生安卓手机 发布:2024-11-29 05:44:28 浏览:193
java代码编译java文件 发布:2024-11-29 05:44:27 浏览:208
如何部署远程服务器 发布:2024-11-29 05:34:37 浏览:523
红米系统存储与手机存储 发布:2024-11-29 05:33:55 浏览:198