繁体   English   中英

在 PL/SQL 中反转字符串的过程

[英]A procedure to Reverse a String in PL/SQL

我刚开始学习 PL/SQL,但不确定如何创建过程。 逻辑似乎是正确的,但我认为第一行中有一些语法错误。 这是我的代码:-

CREATE OR REPLACE PROCEDURE ReverseOf(input IN varchar2(50)) IS
DECLARE 
        reverse varchar2(50);
BEGIN
        FOR i in reverse 1..length(input) LOOP
                reverse := reverse||''||substr(input, i, 1);
        END LOOP;
        dbms_output.put_line(reverse);
END;
/

两件事 - 您不应该在过程/函数的参数列表中指定数据类型大小,并且不需要DECLARE关键字。 尝试这个:

CREATE OR REPLACE PROCEDURE ReverseOf(input IN varchar2) IS
        rev varchar2(50):='';
BEGIN
        FOR i in reverse 1..length(input) LOOP
                rev := rev||substr(input, i, 1);
        END LOOP;
        dbms_output.put_line(rev);
END;

不用 PL/SQL 试试吧!

WITH
params AS
  (SELECT 'supercalifragilisticexpialidocious' phrase FROM dual),
WordReverse (inpt, outpt) AS
  (SELECT phrase inpt, CAST(NULL AS varchar2(4000)) outpt FROM params
   UNION ALL
   SELECT substr(inpt,2,LENGTH(inpt)-1), substr(inpt,1,1) || outpt
   FROM wordReverse
   WHERE LENGTH(inpt) > 0
  )
SELECT phrase,outpt AS reversed FROM wordReverse, params
WHERE LENGTH(outpt) = LENGTH(phrase) ;

PHRASE                             REVERSED
---------------------------------- -----------------------------------
supercalifragilisticexpialidocious suoicodilaipxecitsiligarfilacrepus

引文: http : //rdbms-insight.com/wp/? p= 94

另一种解决方案反向字符串最小化循环计数

DECLARE
v_str     VARCHAR2(100) DEFAULT 'MYSTRING';
v_len     NUMBER;
v_left    VARCHAR2(100);
v_right   VARCHAR2(100);
BEGIN
    v_len := LENGTH(v_str)/2;
    FOR rec IN 1..v_len 
    LOOP
      v_left := substr(v_str,rec,1) || v_left;
      IF rec * 2 <= LENGTH(v_str) THEN
        v_right := v_right || substr(v_str,-rec,1);
      END IF;
    END LOOP;
    v_str := v_right || v_left;
    dbms_output.put_line(v_str);
END;
set serveroutput on
declare
  str1 varchar2(30);
  len number(3);
  str2 varchar2(30);
  i number(3);
begin
  str1:='&str1';
  len:=length(str1);
  for i in reverse 1..len
   loop
    str2:=str2 || substr(str1,i,1);
   end loop;
  dbms_output.put_line('Reverse string is: '||str2);
end;
/
    create or replace procedure ap_reverse_number(input_no VARCHAR2) as
      output_no VARCHAR2(100);

    begin

      for i in 1 .. length(input_no) loop
        output_no := output_no || '' ||
                     substr(input_no, (length(input_no) - i + 1), 1);
      end loop;

      dbms_output.put_line('Input no. is :' || input_no);
      dbms_output.put_line('Output no. is:' || output_no);

    end;

这应该正确地完成工作。

试试这个单行语句来反转 sql 中的字符串

with a as (select 'brahma' k from dual)
select listagg(substr(k,length(k)-level+1,1),'') within group (order by 1)  b from a connect by level<length(k)+1
 declare
 name varchar2(20):='&name';
 rname varchar2(20);
 begin
 for i in reverse 1..length(name)
 loop
 rname:=rname||substr(name,i,1);
 end loop;
 display(rname);
 end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM