为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM管理工具 V8 (Build 2021.09.10)
【操作系统】:win 10
【CPU】:
【问题描述】*:
请大神解答!
--CREATE TABLE "CASE"."test_test_test"
--(
--"user_id" VARCHAR(32) NOT NULL,
--"user_name" VARCHAR(10),
--"age" INT,
--NOT CLUSTER PRIMARY KEY("user_id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
--
--COMMENT ON TABLE "CASE"."test_test_test" IS '简单测试';
--insert into test_test_test VALUES('abcdef1','张三1',16);
--insert into test_test_test VALUES('abcdef2','张三2',12);
--insert into test_test_test VALUES('abcdef3','张三3',18);
--insert into test_test_test VALUES('abcdef4','张三4',19);
--insert into test_test_test VALUES('abcdef5','张三5',14);
--insert into test_test_test VALUES('abcdef6','张三6',18);
--insert into test_test_test VALUES('abcdef7','张三7',14);
--insert into test_test_test VALUES('abcdef8','张三8',13);
--insert into test_test_test VALUES('abcdef9','张三9',14);
--insert into test_test_test VALUES('abcdef10','张三10',20);
--
--
create or REPLACE PROCEDURE proc_test_test_test ( user_id in VARCHAR(32))
as
BEGIN
/*
问题描述:在全部用户ID中排除一个(或多个)用户ID
使用 <> 或 not in 时,查询无结果,
使用 常量 却可以查询出结果
使用 NOT IN ( user_id) 时无记录
使用 <> user_id 时也无记录
使用 'abcdef3' 常量代替时 却可以
*/
SELECT * from test_test_test t
where 1=1
--AND t.user_id <> user_id --无记录
AND t.user_id NOT IN ( user_id) --无记录
--AND t.user_id NOT IN ( 'abcdef3') --有记录
;
-- select user_id; --单独输出 为 abcdef3
end;
call proc_test_test_test ('abcdef3');
多行输出可以考虑使用cursor
create or REPLACE PROCEDURE proc_test_test_test (u_id in VARCHAR(32))
as
cursor c1 is SELECT user_id,user_name,age from test_test_test t where t.user_id <> u_id;
uu_id varchar2(32);
u_name varchar2(10);
t_age int;
BEGIN
print 'EXCLUDE USER ID : ' || u_id;
open c1;
loop
fetch c1 into uu_id,u_name,t_age;
exit when c1%notfound;
print uu_id ||','|| u_name ||','|| t_age;
end loop;
close c1;
END proc_test_test_test;
/
我在本机测试了一下,是可以的呢



可能需要把数据库升级一下,我这边的版本是: