甲骨文“ORA-01008”错误。变量未绑定
Posted
技术标签:
【中文标题】甲骨文“ORA-01008”错误。变量未绑定【英文标题】:Oracle "ORA-01008" Error. Variable Not Bound 【发布时间】:2013-11-06 05:39:52 【问题描述】:我刚刚开始使用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
【问题讨论】:
【参考方案1】:试试:
DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role_test;
END;
【讨论】:
但是为什么我不能使用与表中相同的变量名?说role
。那么:role_test
和role_test
有什么区别呢?
@Veer 这不是动态 SQL。更多详情:SO: Use of bind variable【参考方案2】:
如果您想使用与列名相同的变量名,您可以尝试使用这样的过程,
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');
【讨论】:
【参考方案3】:您可以咨询v$reserved_words
,以确定是否可以在PL/SQL 中使用ROLE
等特定词:
select res_attr from v$reserved_words where keyword = 'ROLE';
这个语句返回一行的事实表明ROLE
确实是一个关键字,因此不能在PL/SQL中使用。然而,res_attr_
是 N
,这表明该词可以在表中用作属性名称。
另见v$reserved_words on tahiti.oracle.com
【讨论】:
【参考方案4】:你试试
DECLARE
role_test varchar(40) := 'Programmer';
BEGIN
update veer_test set project_id=1008420 where role=role_test;
END;
愿这一切顺利
【讨论】:
但是为什么我不能使用与我的表中相同的变量名呢?说role
。那么:role_test
和role_test
有什么区别呢?以上是关于甲骨文“ORA-01008”错误。变量未绑定的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: ORA-01008: 并非所有变量都使用 Mybatis 3 绑定