日期:2014-05-17  浏览次数:20896 次

a,b,c是否全部存在于一列中的sql
表table1
用户 物品
张三 1
张三 2
张三 3
李四 1
李四 2

判断某个用户是否同时某几样物品,物品用逗号分割。返回值任意,只要能判断出正误就行。
如:判断张三是否拥有1,2两样物品,正确
如:判断张三是否拥有1,4两样物品,错误

------解决方案--------------------
type sybs is table of number index by binary_integer;

create function pd (cust varchar2,wp sybs)--参数为1用户,参数2为要判断的物品数组
return varchar2 is
str varchar2(50);
v_num number;
v_retu varchar2;
begin
select wm_concat(物品) into str from table where 用户=cust;
for syb sybs in wp loop
v_num:=instr(str,syb);
if v_num=0 then
v_retu:='错误';
exit;
end if;
v_retu:='正确';
end loop;
return v_retu;
end;
------解决方案--------------------
[code=SQL][/code]
CREATE FUNCTION CS(V_NAME VARCHAR2, V_STR VARCHAR2)

 RETURN VARCHAR2 IS
V_NUM NUMBER;
V_FLAG VARCHAR2(10);
BEGIN
FOR I IN (SELECT REGEXP_SUBSTR(V_STR, '[^,]+', 1, ROWNUM) STR
FROM DUAL
CONNECT BY ROWNUM <= LENGTH(REGEXP_REPLACE(V_STR, '[^,]+')) + 1) LOOP
V_NUM:=INSTR(V_NAME,I.STR);
IF V_NUM = 0 THEN
V_FLAG := '错误';
EXIT;
ELSE
V_FLAG := '正确';
END IF;
END LOOP;
RETURN V_FLAG;
END;

SELECT NAME, CS(WM_CONCAT(物品),变量值) FROM table1 GROUP BY NAME