PL / SQL字符串任务

时间:2011-02-01 18:03:07

标签: sql oracle string plsql

我需要在PL / SQL中处理两个任务:

  1. 是否显示字符串中每个单词的第一个字符,例如“标准查询语言”,因此它应该返回值为“SQL”。

  2. 将文本“apple”转换为上限“APPLE”,但不使用大写或小写预定义函数。

  3. 是否可以在PL / SQL中使用高级功能而不是初级级别的方法。

5 个答案:

答案 0 :(得分:4)

是的,在PL / SQL中很多东西是可能的,但一般情况下如果你可以在SQL中这样做,那么就不要使用程序方法重新发明内置功能(正如OMG Ponies评论的regex可能是一个很好的方法)。

那就是说,如果真的希望通过char迭代字符串char,你可以做类似的事情:

declare
  in_string varchar2(20) := 'Im a string';
  in_length number;
  cnt number := 0;
  in_char char(1);
begin
  in_length := length(in_string);
  while (cnt < in_length)
  loop
    cnt := cnt + 1;
    in_char := substr(in_string, cnt, 1);
    -- do something wonderful here

  end loop;
exception
  when others then raise;
end;

但是,再次,如果你只能使用UPPER函数,不要这样做大写一个字符串(例如);)

希望这有帮助。

答案 1 :(得分:2)

对于(1),我会INITCAP

select initcap (lower('Structured query Language'))
from dual

然后遍历字符串寻找那些大写字母。

答案 2 :(得分:2)

正规表达救援!

提取每个单词的第一个字符:

select regexp_replace ('Structured Query Language', ' \*(.)[^ ]\*', '\1' ) from dual;

答案 3 :(得分:1)

我已经编写了执行上述两项任务的代码,它们运行正常,没有添加异常处理或验证。

(1) DECLARE
    NAME VARCHAR2(100):='&NAM';
    CURR_CHAR VARCHAR2(1);
    ABBRV VARCHAR2(100);
BEGIN
ABBRV := SUBSTR(NAME,1,1);
FOR I IN 1..LENGTH(NAME) LOOP
    CURR_CHAR := SUBSTR(NAME,I,1);
    IF CURR_CHAR =  CHR(32) THEN
        -- &PL('SPACE');
        ABBRV := ABBRV || SUBSTR(NAME,I+1,1);
    END IF;
END LOOP;
&PL('ABBRIVATION OF : ' || NAME);
&PL(' IS ... :  ' || ABBRV);
END;

(2)DECLARE
    VALUE VARCHAR2(100) := '&VAL';
    CURR_CHAR VARCHAR2(1);
    UPPER_CASE VARCHAR2(100);
BEGIN
    FOR I IN 1..LENGTH(VALUE) LOOP
        CURR_CHAR := SUBSTR(VALUE,I,1);
        UPPER_CASE := UPPER_CASE || CHR(ASCII(CURR_CHAR)-32);   
    END LOOP;
    &PL(' UPPER CASE : ' || UPPER_CASE);
END;

答案 4 :(得分:1)

  1. 是否显示字符串中每个单词的第一个字符,例如“标准查询语言”,因此它应该将值返回为“SQL”。

    DECLARE
        STR VARCHAR(100):='Standard Query Language';
        J NUMBER;
    BEGIN
        FOR I IN 1..LENGTH(STR) LOOP        
            IF SUBSTR(STR,I,1)=' ' THEN
                J:=I+1;
                DBMS_OUTPUT.PUT(SUBSTR(STR,J,1));
            END IF;
            IF I=1 THEN
                DBMS_OUTPUT.PUT(SUBSTR(STR,I,1));
            END IF;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(' ');
    END;
    
  2. 将文本“apple”转换为上限“APPLE”,但不使用大写或小写预定义函数。

    DECLARE
        STR VARCHAR2(10):='kiran';
    BEGIN
        FOR I IN 1..LENGTH(STR) LOOP
            DBMS_OUTPUT.PUT(CHR(ASCII(SUBSTR(STR,I,1))-32));
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(' ');
    END;