PL/SQL——替换变量

Posted

技术标签:

【中文标题】PL/SQL——替换变量【英文标题】:PL/SQL -- substitution variable 【发布时间】:2021-11-20 20:30:28 【问题描述】:

我正在使用 SQL Developer 并编写此 PL/SQL 代码,但出现错误。请帮忙。

SET SERVEROUTPUT ON

ACCEPT name  prompt 'Name of employee'

declare
    v_sal NUMBER;
BEGIN
    v_sal := &name;
    SELECT
        salary
    INTO v_sal
    FROM
        employees
    WHERE
        first_name = '&name';
    dbms_output.put_line('Employee ' || &name || ' has the salary' || v_sal);

END;

////

Error report -
ORA-06550: linia 4, coloana 14:
PLS-00201: identifier 'MOZHE' must be declared
ORA-06550: linia 4, coloana 5:
PL/SQL: Statement ignored
ORA-06550: linia 12, coloana 54:
PLS-00201: identifier 'MOZHE' must be declared
ORA-06550: linia 12, coloana 5:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

【问题讨论】:

但是,代码中有 mo MOZHE 莫哲是employees表中我想得到的员工之一 好吧,然后替换为'&name' 并输入MOZHE 输入'MOZHE',因为您的变量是字符串类型的。 第 4 行毫无意义,语法也很糟糕。您想将 v_sal 设置为 '&name' 但忘记了引号,但何苦呢?您只需在 SQL 中再次覆盖它。把它拿出来。第 12 行有同样的语法问题,将 &name 放在单引号中。 v_sal := &name; 没有意义。 v_sal 是工资金额。 【参考方案1】:

你想要:

SET SERVEROUTPUT ON

ACCEPT name  prompt 'Name of employee'

DECLARE
    v_sal NUMBER;
BEGIN
    SELECT salary
    INTO   v_sal
    FROM   employees
    WHERE  first_name = '&&name';

    dbms_output.put_line('Employee &&name has the salary' || v_sal);
END;
/

【讨论】:

现在一切正常。谢谢你:)

以上是关于PL/SQL——替换变量的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 游标的变量/文字替换?

如何在 select 的 where 子句中替换 oracle pl/sql 变量

Oracle PL/SQL,如何使用简单的替换变量和months_between计算出生日期的年龄

Oracle PL/SQL:在 SAMPLE 子句中使用变量时出现语法错误

在 Oracle APEX PL/SQL 中传递变量

为 EXECUTE IMMEDIATE 解析 PL/SQL 语句中的占位符