我有一系列脚本,它们使用以下代码将条目插入/更新到oracle DB。代码在我的SQL Developer(4.0.1.14.18)实例中正确运行,但是,当我的同事试图运行它时会出现以下错误:
绑定变量“usrname”未声明 匿名区块已完成
现在,环顾四周,我发现SQL是动态的,Oracle不喜欢运行它,所以我必须重写EXECUTE IMMEDIATE格式的代码,让SQL开发人员运行它。
但是,这并不能解释为什么代码可以从我的机器上正确运行而不是他们的机器。任何人都可以提供有关应用程序行为不同的原因的任何见解吗?有没有比重写代码更简单的方法来运行代码?我有很多脚本,我不愿重做它们。
define
var usrid varchar2(8)
var usrname varchar2(40)
var usremail varchar2(50)
/* define variable values */
exec :usrid := UPPER('k163ed41') /* usr_id -- kcl ID */
exec :usrname := INITCAP('John Smith') /* usr_dsc -- user name */
exec :usremail := :usrid || '@kcl.ac.uk' /* usremail_id -- user email */
/* create usermenu */
CREATE TABLE usermenutemptable (MEN_ID varchar2(8), MEN_DSC varchar2(40));
-- insert values to Tempemp
INSERT INTO usermenutemptable (men_id, men_dsc) VALUES (:usrid ,:usrname);
-- select * from temptable;
MERGE INTO menu s
USING (select men_id, men_dsc from usermenutemptable) t
ON (s.men_id = t.men_id)
WHEN MATCHED THEN UPDATE SET s.men_DSC = t.men_DSC
WHEN NOT MATCHED THEN insert values (t.MEN_ID, t.men_DSC);
--select * from susr where usr_id = :usrid
commit;
drop table usermenutemptable;