您好。我在使用PLSQL时出现了一个问题。想向您请教一下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您好。我在使用PLSQL时出现了一个问题。想向您请教一下相关的知识,希望对你有一定的参考价值。
create or replace function Get_StrArrayLength
(
@str varchar(1024),
@split varchar(10)
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
end
return @length
end
GO
CREATE function Get_StrArrayStrOfIndex
(
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
return substring(@str,@start,@location-@start)
end
GO
CREATE PROCEDURE proc_Common_SuperLike
--要查询的表的主键字段名称
@primaryKeyName varchar(999),
--要查询的表名
@talbeName varchar(999),
--要查询的表的字段名称,即内容所在的字段
@contentFieldName varchar(999),
--查询记录的个数(TOP *),匹配的个数越多,排名越靠前
@selectNumber varchar(999),
--匹配字符分隔标记
@splitString varchar(999),
--匹配字符组合字符串
@words varchar(999)
AS
declare @sqlFirst varchar(999)
declare @sqlCenter varchar(999)
declare @sqlLast varchar(999)
BEGIN
set @sqlCenter=''
declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@words,@splitString)
begin
--构造sql查询条件(中间部分)
set @sqlCenter = @sqlCenter+'SELECT '+@primaryKeyName+' FROM '+@talbeName+' WHERE '+@contentFieldName+' like ''%'+dbo.Get_StrArrayStrOfIndex(@words,@splitString,@next)+'%'' UNION ALL '
set @next=@next+1
end
--处理sql语句中间部分,去除最后无用语句
set @sqlCenter=left(@sqlCenter,(len(@sqlCenter)-10))
--构造sql语句开头部分
set @sqlFirst='SELECT TOP '+@selectNumber+' '+@primaryKeyName+',COUNT(*) AS showCout FROM ('
--构造sql语句结尾部分
set @sqlLast=') AS t_Temp GROUP BY '+@primaryKeyName+' ORDER BY showCout DESC'
--拼接出完整sql语句,并执行
execute(@sqlFirst+@sqlCenter+@sqlLast)
END
以上运行后报错
FUNCTION CRM.GET_STRARRAYLENGTH 编译错误
错误:PLS-00103: 出现符号 "@"在需要下列之一时:
<an identifier>
<a double-quoted delimited-identifier> current delete exists
prior
行:3
文本:@str varchar(1024), --要分割的字符串
是不是如果是orcale数据库的话就全部不用@这个符号了
追答是的,declare也可以省了,只要位置放对
oracle数据库使用plsql(64位)时出现的问题
64位win7上装PL/SQL,经常会遇见“Could not load "……\\bin\\oci.dll"”这个错误,我查了一下资料,原因是PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件,操作如下:
Step1:
到如下地址下载包含oci.dll文件包“instantclient_10_2",将该文件解压到“D:\\Program Files \\”下
http://download.csdn.net/detail/shenkxiao/4181424
Step2:装好Oracle客户端,并配好TNS后,启动PL/SQL,点击登录中的“取消”按钮,不登录直接进入PL/SQL操作界面,点击“工具”下“首选项”如下:
Step3:选择Step1目录下插件中的oci.dll文件,点击“确认”,如下图:
Step4: 登录页面中在“数据库”选项中输入TNS中的IP:端口/数据库实例(经测试,此处必须这样写,否则不能正常连接)
以上是关于您好。我在使用PLSQL时出现了一个问题。想向您请教一下的主要内容,如果未能解决你的问题,请参考以下文章