1

我不明白为什么该变量声明命令不起作用。你可以帮帮我吗?

SET SERVEROUTPUT ON
ACCEPT rek_pers PROMPT 'Employee name: '
ACCEPT year_sal PROMPT 'Yearly salary: '

VARIABLE vENAME VARCHAR2,vSAL NUMBER

DECLARE
:vENAME := &rek_pers;
:vSAL := &year_sal;

BEGIN  
UPDATE Emp SET Emp.Sal = vSAL
Where Emp.Ename = vENAME;

COMMIT;
END;
/

我收到答案:绑定变量“vENAME”未声明

在此先感谢您的帮助!

4

2 回答 2

4

你有几个错误。

变量应该单独定义,而不是逗号。IE:

VARIABLE vENAME VARCHAR2
VARIABLE vSAL NUMBER

其次,这是无效的语法:

:vENAME := &rek_pers;
:vSAL := &year_sal;

它应该只是简单的(不需要variable定义):

DECLARE
vSAL Emp.Sal%type := &year_sal;
vENAME Emp.Ename%type := '&rek_pers';
BEGIN  
UPDATE Emp SET Emp.Sal = vSAL
Where Emp.Ename = vENAME;

COMMIT;
END;
/

如果您确实想分配一个变量,正确的方法是:

VARIABLE vENAME VARCHAR2(200)
VARIABLE vSAL NUMBER
EXEC :vSAL := &year_sal;
EXEC :vENAME := '&rek_pers';
BEGIN  
UPDATE Emp SET Emp.Sal = :vSAL
Where Emp.Ename = :vENAME;
COMMIT;
END;
/

(ps不要忘记varchar2的长度)

于 2012-12-30T23:57:22.333 回答
0

不要通过声明变量来使用冒号。尝试:

宣布

vENAME := &rek_pers;

vSAL := &year_sal;

于 2012-12-30T23:51:40.810 回答