【发布时间】:2021-06-14 02:51:03
【问题描述】:
这是我的 SQL Server 函数,我正在尝试将大写转换为正确的大小写,它在 SQL Server 中成功运行,但在 Oracle 中却没有,有人可以帮我转换以下代码:
CREATE FUNCTION CamelCase(@Text as VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Index INT;
DECLARE @CurChar CHAR(1);
DECLARE @Reset BIT;
DECLARE @Ret VARCHAR(8000);
IF @Text IS NULL
RETURN NULL;
SELECT @Reset = 1,
@Index = 1,
@Ret = '';
WHILE (@Index <= len(@Text))
SELECT @CurChar = substring(@Text, @Index, 1),
@Ret = @Ret + CASE WHEN @Reset = 1 THEN UPPER(@CurChar) ELSE LOWER(@CurChar) END,
@Reset = CASE WHEN @CurChar like '[a-zA-Z]' THEN 0 ELSE 1 END,
@Index = @Index + 1
RETURN @Ret
END
我尝试将其翻译成如下所示的Oracle函数代码:
create or replace function CamelCase(Text in VARCHAR2)
RETURN VARCHAR2
IS
Ret VARCHAR2(8000):= '';
Index NUMBER:= 1;
CurChar CHAR0;
Resets BIT := 1;
BEGIN
WHILE (Index <= LENGTH(Text))
loop
CurChar := SUBSTR(Text, Index, 1);
if (Reset = 1) then
ret:= UPPER(CurChar) ;
ELSE
ret:= LOWER(CurChar);
end if ;
if (CurChar like '[a-zA-Z]') then
reset:= 0;
else
reset:= 1;
end if ;
Index := Index + 1;
end loop;
RETURN Ret;
END
但这似乎是错误的,请有人帮我转换一下。
【问题讨论】:
-
老实说,我会尝试在两种环境中修复整个问题。任一 RDBMS 上的循环都会非常缓慢。
-
它的目的是什么?
-
谢谢大家,将大写转换为正确的大小写。
-
与其循环使用 UPPER 和 LOWER,你考虑过只使用 INITCAP 吗?
-
不,我没有因为可能的话我需要完全转换这个函数。谢谢
标签: sql sql-server oracle function plsql