Oracle 在我的PLSQL程序中,查找输入字符串中的元音并检查其是否为回文,有什么错误?
这是我为PLSQL程序编写的代码,用于计算用户输入的字符串中的元音数,并检查其是否为回文,并将其显示为输出Oracle 在我的PLSQL程序中,查找输入字符串中的元音并检查其是否为回文,有什么错误?,oracle,plsql,Oracle,Plsql,这是我为PLSQL程序编写的代码,用于计算用户输入的字符串中的元音数,并检查其是否为回文,并将其显示为输出 SET SERVEROUTPUT ON DECLARE STR VARCHAR(30); N VARCHAR(30); REV VARCHAR(30); L NUMBER(10); TEMP VARCHAR(30); C NUMBER(10):=0; BEGIN STR:='&STR'; TEMP:=STR; L:=LENGTH(STR);
SET SERVEROUTPUT ON
DECLARE
STR VARCHAR(30);
N VARCHAR(30);
REV VARCHAR(30);
L NUMBER(10);
TEMP VARCHAR(30);
C NUMBER(10):=0;
BEGIN
STR:='&STR';
TEMP:=STR;
L:=LENGTH(STR);
FOR I IN 1..L
LOOP
REV:=(REV||SUBSTR(STR,L,1));
N:=SUBSTR(STR,I,1);
IF N IN ('A','E','I','O','U','a','e','i','o','u')
THEN
C:=C+1;
END IF;
L:=L-1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('ENTERED STRING IS '||STR);
DBMS_OUTPUT.PUT_LINE('THE NUMBER OF VOWELS IN THE STRING IS:'||C);
IF(TEMP=REV)
THEN
DBMS_OUTPUT.PUT_LINE('ITS A PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE('ITS NOT A PALINDROME');
END IF;
END;
/
我在SQL*Plus中尝试了这个程序,并将其作为输出
有什么办法吗 这里是另一种解决方案,而不是修复代码
declare
STR varchar2(30);
REV varchar2(30);
C number(10) := 0;
begin
STR:='&STR';
select reverse(STR) into REV from DUAL;
C := regexp_count(STR, '[AEIOUaeiou]');
DBMS_OUTPUT.PUT_LINE(to_char(C));
if STR = REV then
DBMS_OUTPUT.PUT_LINE('Palindrome.');
end if;
end;
DECLARE
STR VARCHAR2(30);
N CHAR(1);
REV VARCHAR2(30);
L NUMBER(10);
C NUMBER(10):=0;
BEGIN
STR:='&STR';
L:=LENGTH(STR);
FOR I IN 1..L
LOOP
N:=SUBSTR(STR,(I * -1),1);
REV:=REV||N;
IF N IN ('A','E','I','O','U','a','e','i','o','u') THEN
C:=C+1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('ENTERED STRING IS '||STR);
DBMS_OUTPUT.PUT_LINE('THE NUMBER OF VOWELS IN THE STRING IS:'||C);
IF(STR=REV) THEN
DBMS_OUTPUT.PUT_LINE('ITS A PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE('ITS NOT A PALINDROME');
END IF;
END;
参考和
下面是我在SQL*Plus中运行上述代码时的示例输出
编辑
我对你代码的修复
declare
STR varchar2(30);
REV varchar2(30);
C number(10) := 0;
begin
STR:='&STR';
select reverse(STR) into REV from DUAL;
C := regexp_count(STR, '[AEIOUaeiou]');
DBMS_OUTPUT.PUT_LINE(to_char(C));
if STR = REV then
DBMS_OUTPUT.PUT_LINE('Palindrome.');
end if;
end;
DECLARE
STR VARCHAR2(30);
N CHAR(1);
REV VARCHAR2(30);
L NUMBER(10);
C NUMBER(10):=0;
BEGIN
STR:='&STR';
L:=LENGTH(STR);
FOR I IN 1..L
LOOP
N:=SUBSTR(STR,(I * -1),1);
REV:=REV||N;
IF N IN ('A','E','I','O','U','a','e','i','o','u') THEN
C:=C+1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('ENTERED STRING IS '||STR);
DBMS_OUTPUT.PUT_LINE('THE NUMBER OF VOWELS IN THE STRING IS:'||C);
IF(STR=REV) THEN
DBMS_OUTPUT.PUT_LINE('ITS A PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE('ITS NOT A PALINDROME');
END IF;
END;
参考函数。我不确定推荐某人使用未记录的函数是否是个好主意。相反,我是其中之一。WM_CONCAT另一个版本(在12c及以上版本中甚至不存在),因此,一旦Oracle将其从未来版本中删除,使用这些版本的任何人都可能需要修复(大量?)其代码。