A procedure to Reverse a String in PL/SQL

后端 未结 6 781
猫巷女王i
猫巷女王i 2020-12-22 03:11

I just started learning PL/SQL and I\'m not sure how to create a procedure. The logic seems about right but I think there\'s some syntactical mistake in the first line. Here

相关标签:
6条回答
  • 2020-12-22 03:35

    Another solution reverse string minimizing loop count

    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;
    
    0 讨论(0)
  • 2020-12-22 03:42
    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;
    /
    
    0 讨论(0)
  • 2020-12-22 03:46

    Two things - you shouldn't specify the datatype size in procedure's/function's parameter list and you do not need the DECLARE keyword. Try this:

    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;
    
    0 讨论(0)
  • 2020-12-22 03:49
     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;
    
    0 讨论(0)
  • 2020-12-22 03:55
        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;
    

    This should do the job correctly.

    0 讨论(0)
  • 2020-12-22 04:00

    Try it without 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
    

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

    0 讨论(0)
提交回复
热议问题