Oracle PL/SQL:如何 return 基于同一记录的 ID 字段的字符串值?

Oracle PL/SQL: How to return a string value based on an ID field for the same record?

作为 PL/SQL 的新手,我想编写一个简单的函数,当我输入它的关联 ID 值(即输入一个字段和 return 时,return 是一个字符串值与同一记录关联的另一个字段)。例如,在具有地址和关联 ID 的 table 中,如果我将“100”(无引号)传递给函数,则“350 Pearl St”是 returned。

到目前为止我有:

CREATE OR REPLACE FUNCTION get_term
    (MAJOR_ID_IN IN NUMBER)
    RETURN VARCHAR2
IS
BEGIN
    SELECT t.TERM_NAME
    FROM CV_RELATION r, CV_TERMS t
    WHERE t.TERM_ID = r.MAJOR_ID_IN; --Primary Key linked to Foreign Key
END get_term;

这个return是一个列表;但是,我想要字符串名称,这样我就可以在其他函数中使用它来 return 成功消息,而不是 return 有点神秘的 ID(例如,'你已经成功更新地址 350 Pearl St ' 与 '您已成功更新地址 100')。请注意,我是从另一个 table.

中的外键调用 ID

试试这个。

我添加了一个 return 变量。然后我选择了 INTO 变量。然后我 return 在最后编辑了变量。我还删除了无关的 table。你没有加入那个 table 所以会受到笛卡尔连接的影响,但无论如何都不需要它,因为输入变量是你需要的键。

现在,这实际上是不够的。当只有一行 returned 时,使用 SELECT .. INTO 效果很好。如果没有行被 returned,异常。您可以通过捕获此异常并默认您的 return 值来解决此问题。如果 >1 行是 return,则异常。您可以通过确保查询限制为 return 不超过一行来解决此问题,例如 FETCH FIRST ROW ONLY(适用于 12c)。

CREATE OR REPLACE FUNCTION get_term
    (MAJOR_ID_IN IN NUMBER)
    RETURN VARCHAR2
IS
    ret_val cv_terms.term_name%type;
BEGIN
    SELECT t.TERM_NAME
    into ret_val
    FROM CV_TERMS t
    WHERE t.TERM_ID = MAJOR_ID_IN; --Primary Key linked to Foreign Key

    return ret_val;
END get_term;