create table table1(did number,d_name varchar2(100));
insert into table1(did,d_name) values(1,'张');
insert into table1(did,d_name) values(2,'王');
insert into table1(did,d_name) values(3,'李');create or replace procedure test1(indid in number, outdn out varchar2)
as
begin
select d_name into outdn from table1 where did = indid;
exception
WHEN OTHERS THEN
DBMS_OUTPUT.LINE('wrong');
end test1;
create or replace procedure test2(indid in number, outdn out varchar2)
as
declare
tmp_indid number;
begin
tmp_indid := indid;
select d_name into outdn from table1 where did = tmp_indid;
exception
WHEN OTHERS THEN
DBMS_OUTPUT.LINE('wrong');
end test2;declare
s varchar2(100);
begin
test1(2,s);
-- test2(2,s);
DBMS_OUTPUT.LINE(s);
end;
请教:为什么执行test1查询不到结果出现'wrong',而test2就能得到结果,
初学望高手解答下,万分感谢!(环境oracle10g,pl/sql dev v6.0.5
上面是临时写的,无法测试,不计语法错误),只是问问:test1中直接把
传入的参数indid放在where条件后面就得不到结果,而test2中在存储过程 里面用个
临时变量,并将传入值付给临时变量,再在where条件后面用临时表量就能得到正
确结果了,为什么会这样?
insert into table1(did,d_name) values(1,'张');
insert into table1(did,d_name) values(2,'王');
insert into table1(did,d_name) values(3,'李');create or replace procedure test1(indid in number, outdn out varchar2)
as
begin
select d_name into outdn from table1 where did = indid;
exception
WHEN OTHERS THEN
DBMS_OUTPUT.LINE('wrong');
end test1;
create or replace procedure test2(indid in number, outdn out varchar2)
as
declare
tmp_indid number;
begin
tmp_indid := indid;
select d_name into outdn from table1 where did = tmp_indid;
exception
WHEN OTHERS THEN
DBMS_OUTPUT.LINE('wrong');
end test2;declare
s varchar2(100);
begin
test1(2,s);
-- test2(2,s);
DBMS_OUTPUT.LINE(s);
end;
请教:为什么执行test1查询不到结果出现'wrong',而test2就能得到结果,
初学望高手解答下,万分感谢!(环境oracle10g,pl/sql dev v6.0.5
上面是临时写的,无法测试,不计语法错误),只是问问:test1中直接把
传入的参数indid放在where条件后面就得不到结果,而test2中在存储过程 里面用个
临时变量,并将传入值付给临时变量,再在where条件后面用临时表量就能得到正
确结果了,为什么会这样?
你最好测试一下
两个过程应该结果应该是一样的
create or replace procedure test1(did in number, outdn out varchar2)
as
begin
select d_name into outdn from table1 where did = did;
exception
WHEN OTHERS THEN
DBMS_OUTPUT.LINE('wrong');
end test1; 原因,did = did oracle不知道哪个是哪个了,谢谢二位