当前位置:首页 » 存储配置 » 存储过程字符串长度

存储过程字符串长度

发布时间: 2023-08-04 03:26:10

A. 关于存储过程中执行字符串

alter
proc
[dbo].[fun_query_pm]
@ii_pm_name
varchar(20)
as
begin
declare
@where
varchar(20)
begin
set
@where
=
'missaka'
set
@where
=
@where
+
@ii_pm_name
print
@where
print
@ii_pm_name
end
end
exec
p_test
'10011'
你把char换成varchar就可以显示了,这主要是char是固定长度,当set
@where='misaka'时,
实际上@where中的字节段已经填满,后面空的被空格字符填满,所以当你再进行连接的时候就没位置连了,
当然不能连接了。用varchar就不会了

B. oracle怎么用函数求一个存储过程的输入参数(是一个以,为分隔的字符串)的长度~! 急,不胜感激!

select substr(',' || a.exc,
instr(',' || a.exc, ',', 1, b.rn) + 1,
instr(a.exc || ',', ',', 1, b.rn) -
instr(',' || a.exc, ',', 1, b.rn)) exc
from (select 'a,b,c,d,e,f,g,h' exc from al t) A,
(SELECT ROWNUM RN FROM DUAL CONNECT BY ROWNUM < 20) B
where length(a.exc) - length(replace(a.exc, ',')) + 1 >= b.rn

C. oracle 存储过程里用 execute immedate 动态sql,更新一个表的clob字段报字符长度

sql里面varchar2最多4000个字节,sql语句最多32K长度,估计是你的a_clob太长,放到sql里面超过这个限制了,具体是哪个原因还得你自己测试。
可以使用绑定变量的方式来做。
V_SQL
:=
'UPDATE
B
'||
'
SET
B_CLOB
=
'''
||
AA.A_CLOB
||'''
WHERE
B_KEY
=
'''||
AA.A_KEY
||
'''';
EXECUTE
IMMEDIATE
V_SQL;
改成:
V_SQL
:=
'UPDATE
B
SET
B_CLOB
=:1
WHERE
B_KEY
=:2
';
EXECUTE
IMMEDIATE
V_SQL
using
AA.A_CLOB,AA.A_KEY;

D. SQL 存储过程 长字符串分割存储

declare @inputStr varchar(max)
set @inputStr='H,SH600,AAA,123,456,567,566,565,H,SH600,ABC,542,34,35,367,765,H,SH600,AAC,52,314,325,3867,7865'

declare @divideFlag varchar(20)
set @divideFlag='H,'

declare @bnname varchar(8)
declare @gpdm varchar(8)
declare @gpcn int
declare @ydate int
declare @yopen int
declare @yhigh int

declare @substr varchar(200)
declare @pos1 int
declare @pos2 int

declare @sql varchar(400)

--如果字符串中有分隔符标记
while CHARINDEX(@divideFlag,@inputStr,0)>0
begin
set @pos1 = CHARINDEX(@divideFlag,@inputStr,0)
print '位置1 '+cast(@pos1 as varchar)
set @pos2 = CHARINDEX(@divideFlag,@inputStr,@pos1+1)
print '位置2 ' + cast(@pos2 as varchar)

if @pos2>0
begin
set @substr = SUBSTRING(@inputStr,@pos1,@pos2-@pos1)
print '截取处理串 '+ @substr
set @inputStr = SUBSTRING(@inputStr,@pos2,len(@inputStr))
--print @inputStr
end
else
begin
set @substr = SUBSTRING(@inputStr,@pos1,len(@inputStr))
print '截取处理串 '+ @substr
set @inputStr = 'empty'
--print @inputStr
end
--去掉开头的分割标记
set @substr=substring(@substr,CHARINDEX(@divideFlag,@substr,0)+len(@divideFlag),len(@substr))
print '去掉开头分割标记 ' + @substr

if right(@substr,1)=','
begin
set @substr = left(@substr,len(@substr)-1)
print '去掉末尾的逗号' + @substr
end
--取得表名称
set @bnname = substring(@substr,1,charindex(',',@substr,0)-1)
print @bnname
--取表名称后面的字符串
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
--取得第一个字段
set @gpdm = substring(@substr,1,charindex(',',@substr,0)-1)
print @gpdm
--取得后面的字符串
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr

set @gpcn = substring(@substr,1,charindex(',',@substr,0)-1)
print @gpcn
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr

set @ydate = substring(@substr,1,charindex(',',@substr,0)-1)
print @ydate
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr

set @yopen = substring(@substr,1,charindex(',',@substr,0)-1)
print @yopen
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr

set @yhigh = substring(@substr,1,charindex(',',@substr,0)-1)
print @yhigh
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
-- 拼接 插入的 sql 字符串
set @sql = 'insert into '+@bnname+' (gpdm,gpcn,ydate,yopen,yhigh)
values(
'''+@gpdm+''','+cast(@gpcn as varchar)+','+cast(@ydate as varchar)+','+cast(@yopen as varchar)+','+cast(@yhigh as varchar)+'
)'

print @sql
end
-- 拷贝到查询分析器执行,可以看到打印出的消息,拼接的字符串应该可以用

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:432
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:532
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726