我有这个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>