带输入参数的 Oracle PL/SQL 函数

Posted

技术标签:

【中文标题】带输入参数的 Oracle PL/SQL 函数【英文标题】:Oracle PL/SQL function with input parameter 【发布时间】:2019-12-13 09:48:50 【问题描述】:

我是 PL/SQL 的初学者。我创建了反转字符串的函数,它改变字符串中的每 3 个字符。我在一些帮助下创建了这个函数。现在我需要删除这个'abcdeFgh' 并设置函数,这样我就有了输入参数。我该怎么做?

CREATE OR REPLACE FUNCTION RIS.tmp_tzk1_f_preslozi_string
RETURN string
IS 
str VARCHAR2(20) := 'abcdeFgh';
znak CHAR := '';
len NUMBER;
brojac_svako_trece INTEGER := 0;
str1 VARCHAR(20) := '';
BEGIN
    len := LENGTH(str);
    FOR i IN REVERSE 1..len
    LOOP
        brojac_svako_trece := brojac_svako_trece +1;
        znak := SUBSTR (str, i, 1);
        IF MOD(brojac_svako_trece,3) = 0 THEN
            brojac_svako_trece := 0;
            IF ASCII(znak)<97 THEN
                znak := LOWER(znak);
            ELSE 
                znak := UPPER(znak);
            END IF;
        END IF;
        str1 := str1 || znak;
    END LOOP;
    RETURN str1;
  dbms_output.put_line(str1);
END;

DECLARE
   RetVal   VARCHAR2 (32767);
BEGIN
   RetVal := RIS.TMP_TZK1_F_PRESLOZI_STRING;
   dbms_output.put_line(RetVal);
END;

【问题讨论】:

【参考方案1】:

这应该可以完成您非常接近的工作。

CREATE OR REPLACE FUNCTION tmp_tzk1_f_preslozi_string (str IN VARCHAR)
RETURN string
IS 
    znak CHAR := '';
    len NUMBER;
    brojac_svako_trece INTEGER := 0;
    str1 VARCHAR(20) := '';

BEGIN
    len := LENGTH(str);
    FOR i IN REVERSE 1..len
    LOOP
        brojac_svako_trece := brojac_svako_trece +1;
        znak := SUBSTR (str, i, 1);
        IF MOD(brojac_svako_trece,3) = 0 THEN
            brojac_svako_trece := 0;
            IF ASCII(znak)<97 THEN
                znak := LOWER(znak);
            ELSE 
                znak := UPPER(znak);
            END IF;
        END IF;
        str1 := str1 || znak;
    END LOOP;
    RETURN str1;
END;

DECLARE
   RetVal   VARCHAR2 (32767);
BEGIN

   RetVal := TMP_TZK1_F_PRESLOZI_STRING('DobarDan');

   dbms_output.put_line(RetVal);
END;

【讨论】:

【参考方案2】:

其实很简单:

CREATE OR REPLACE FUNCTION RIS.tmp_tzk1_f_preslozi_string(
    str IN VARCHAR2 --> add input params here
) RETURN string
IS 
    znak CHAR := '';
    len NUMBER;
    brojac_svako_trece INTEGER := 0;
    str1 VARCHAR(20) := '';
BEGIN
    -- your code goes here
END;

【讨论】:

以上是关于带输入参数的 Oracle PL/SQL 函数的主要内容,如果未能解决你的问题,请参考以下文章

使用带有布尔输入参数的 PL/SQL 在 oracle 中调用 java 存储过程

带有输入参数的 Oracle JDBC 调用 PL/SQL 过程记录表

oracle数据库之存储函数和过程

PL/SQL轻量版——存储函数/存储过程

oracle pl/sql 存储过程

Oracle PL/SQL:如何根据同一记录的 ID 字段返回字符串值?