使用交换变量PLSQL时出错



我有这个PL/SQL语句:

SET SERVEROUTPUT ON;
ACCEPT lastname PROMPT 'Please enter a Lastname';
DECLARE
lastn employees.last_name%TYPE;
sal employees.salary%TYPE;
BEGIN
lastn := &&lastname;
SELECT salary INTO sal FROM employees WHERE last_name = lastn;
IF sal < 3000 THEN
sal := sal + 500;
UPDATE employees SET salary = sal WHERE last_name = lastn;
DBMS_OUTPUT.PUT_LINE(lastn||' salary updated');
ELSIF sal > 3000 THEN
DBMS_OUTPUT.PUT_LINE(lastn || ' earns ' || sal);
END IF;
END;

如果我输入一个名字,例如"King",我会收到一条错误消息。错误消息是:";必须声明标识符"KING";。

您必须考虑脚本中的字符串&&lastname将被您在运行时插入的值替换;这意味着当你给"国王"时,你的代码变成:

lastn = King;

这显然给出了一个错误。

你只需要报价:

lastn := '&&lastname';

使用脚本x.sqllke this:

ACCEPT lastname PROMPT 'Please enter a Lastname ';
DECLARE
lastn varchar2(100);
BEGIN
lastn := '&&lastname';
dbms_output.put_line('lastn = ' || lastn);
END;
/

如果您尝试将SQL*Plus与一起使用

set verify on

你可以看到这种行为:

SQL> @c:tempx
Please enter a Lastname King
old   4:  lastn := '&&lastname';
new   4:  lastn := 'King';
lastn = King
PL/SQL procedure successfully completed.
SQL>

最新更新