存储过程几种写法

本文主要介绍了SQL存储过程中参数的使用方法,包括创建使用参数的存储过程、使用参数默认值的存储过程、用显式值替代参数默认值的存储过程、使用参数默认值NULL的存储过程以及使用包含通配符的参数默认值的存储过程,并给出了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)创建使用参数的存储过程

Create Proc au_info @lastname varchar(40),@firstname varchar(20)

As

Select  au_lname,au_fname,title,pub_name

From ...

where au_fname=@firstname And au_lname=@lastname

Go

EXECUTE  au_info  ringer,anne

2)创建使用参数默认值的存储过程,该存储过程在没有输入参数的情况下将默认值得到的结果输出

Create Proc au_info @lastname varchar(40)='ringer',@firstname varchar(20)='anne'

As

Select  au_lname,au_fname,title,pub_name

From ...

where au_fname=@firstname And au_lname=@lastname

Go

EXECUTE  au_info

 3)用显式值替代参数默认值的存储过程

Create Proc showind @table varchar(30) ='titles'

as

SELECT Table_Name=sysobjects.name,

INDEX_Name=sysindexes.name,index_id=indid

from sysindexes inner join sysobjects on sysobjects.id=sysindexes.id

where sysobjects.name=@table

EXECUTE showind authors

4)使用参数默认值NULL来创建存储过程,在这种情况下如果没有提供参数值,SQL将不会出错显示

Create Proc showind @table varchar(30) =Null

as

IF @table is NUll

print '请输入参数'

else

SELECT Table_Name=sysobjects.name,

INDEX_Name=sysindexes.name,index_id=indid

from sysindexs inner join sysobjects on sysobjects.id=sysindexes.id

where sysobjects.name=@table

EXECUTE showind authors

5)使用包含通配符的参数默认值创建存储过程

通配符包括(% , _ , [ ]和 [^]),注意需要用Like关键字

CREATE PROC au_info @lastname varchar(40)='r%' , @firstname varchar(20)='%'  AS

Select au_lname,au_fname,title,pub_name
from authors inner join titleauthor on authors.au_id=titleauthor.au_id
join titles on titleauthor.title_id=titles.title_id
join publishers on titles.pub_id=publishers.pub_id

where au_fname like @firstname
and au_lname like @lastname
GO

<think>我们讨论的是在ABAP中处理字符串的前导零(leading zeros)和尾随零(trailing zeros)的几种常见写法。 注意:前导零指的是数字字符串前面的0(如'00123'),尾随零指的是后面的0(如'12300')。 处理前导零的常见方法: 1. 使用CONVERSION_EXIT_ALPHA_OUTPUT函数去除前导零(但注意这个函数主要用于物料号等转换) 2. 使用SHIFT语句左移去除前导零 3. 使用正则表达式 4. 将字符串转换为数字再转回字符串(自动去除前导零,但注意尾随零和浮点数问题) 处理后导零的常见方法: 1. 使用SHIFT语句右移去除尾随零(但需注意空格) 2. 使用正则表达式 3. 使用RTRIM函数(但ABAP的RTRIM只能去除尾随空格,不能直接去零,需要先替换空格?) 注意:ABAP字符串中如果包含数字,但以字符串形式存储,前导零是字符串的一部分。数字类型(如I, P)则不会存储前导零。 下面给出几种写法的示例:</think>在ABAP中处理前后导零(前导零和尾随零)有以下几种常用写法: ### 1. 使用标准转换函数 ```abap " 去除前导零 DATA(lv_without_leading_zeros) = |{ lv_string ALPHA = OUT }|. " 添加前导零(固定长度) DATA(lv_with_leading_zeros) = |{ lv_string ALPHA = IN WIDTH = 10 }|. ``` ### 2. 使用正则表达式 ```abap " 去除前导零 REPLACE REGEX '^0+' IN lv_string WITH ''. " 去除尾随零 REPLACE REGEX '0+$' IN lv_string WITH ''. ``` ### 3. 使用SHIFT语句 ```abap " 去除前导零 SHIFT lv_string LEFT DELETING LEADING '0'. " 去除尾随零 SHIFT lv_string RIGHT DELETING TRAILING '0'. ``` ### 4. 使用CONDENSE优化(结合转换) ```abap " 去除前导零并压缩空格 CONDENSE lv_string NO-GAPS. " 转换为数字再转回字符串(自动去前导零) DATA(lv_num) = CONV decfloat34( lv_string ). lv_string = |{ lv_num }|. ``` ### 5. 自定义函数处理 ```abap FORM remove_zeros CHANGING cv_string TYPE string. " 去除前导零 WHILE cv_string IS NOT INITIAL AND cv_string(1) = '0'. SHIFT cv_string LEFT BY 1 PLACES. ENDWHILE. " 去除尾随零 DATA(lv_len) = strlen( cv_string ). WHILE lv_len > 0 AND cv_string+lv_len(1) = '0'. lv_len = lv_len - 1. ENDWHILE. cv_string = cv_string(lv_len). ENDFORM. ``` ### 6. 数值转换函数 ```abap " 使用CONVERSION_EXIT处理特定字段 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = lv_string IMPORTING output = lv_without_zeros. " 反向操作添加前导零 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_string IMPORTING output = lv_with_zeros. ``` ### 使用场景对比: | 方法 | 适用场景 | 优点 | 缺点 | |--------------------|----------------------------------|--------------------------|--------------------| | ALPHA转换 | SAP标准字段(如物料号、会计科目) | 简洁高效,符合SAP标准 | 仅适用于字符字段 | | 正则表达式 | 复杂字符串处理 | 灵活强大,单行完成 | 性能开销较大 | | SHIFT语句 | 简单零值去除 | 内存效率高,直接操作 | 需循环处理 | | CONDENSE+转换 | 混合数据清洗 | 同时处理空格和零值 | 改变原始数据类型 | | 自定义函数 | 特殊业务需求 | 完全可控,可定制逻辑 | 需额外开发维护 | | CONVERSION_EXIT | SAP标准字段转换 | 符合业务规范,自动处理 | 仅限预定义字段类型 | ### 最佳实践建议: 1. **SAP标准字段**:优先使用`ALPHA = IN/OUT`或`CONVERSION_EXIT`函数 2. **通用字符串**:使用正则表达式或SHIFT语句 3. **性能敏感场景**:选择SHIFT语句或自定义函数 4. **混合数据处理**:使用CONDENSE结合类型转换 5. **复杂业务规则**:封装自定义函数实现复用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值