2

我刚刚开始PL/SQL编写一个简单的基础代码。我没有得到,代码有什么问题。

DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=:role_test;
END;

我越来越ORA-01008: not all variables bound

早些时候我试过:

DECLARE
role varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role;
END;

这更新了表的所有行。嗯,这是有道理的。但是,如果我想使用与表中相同的变量名怎么办。我也试过:

role=:role;

但同样的错误ORA-01008

4

4 回答 4

3

尝试:

DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role_test;
END;
于 2013-11-06T05:59:51.223 回答
1

如果您想使用与列名相同的变量名,您可以尝试使用这样的过程,

CREATE OR REPLACE PROCEDURE role_p(role VARCHAR2)
IS
BEGIN
     UPDATE veer_test SET project_id=1008422 WHERE role = role_p.role;
END;

执行:

EXECUTE role_p('Programmer');
于 2013-11-06T06:16:08.267 回答
1

您可以咨询v$reserved_words以确定是否可以使用特定的词,例如ROLE在 PL/SQL 中:

select res_attr from v$reserved_words where keyword = 'ROLE';

该语句返回一行的事实表明确实ROLE是一个关键字,因此不能在 PL/SQL 中使用。然而,res_attr_isN表示该词可以在表中用作属性名称。

另请参见tahiti.oracle.com 上的 v$reserved_words

于 2013-11-06T06:18:43.977 回答
0

你试试

DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role_test;
END;

愿这项工作

于 2013-11-06T06:03:51.393 回答