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:
【问题讨论】:
但是,代码中有 moMOZHE
莫哲是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——替换变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 select 的 where 子句中替换 oracle pl/sql 变量
Oracle PL/SQL,如何使用简单的替换变量和months_between计算出生日期的年龄