Sql oracle过程的多值性
我想在Oracle 11g中使用Sql oracle过程的多值性,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我想在Oracle 11g中使用p\u so\u code添加多值,其中so在(A,B,C)中 我尝试了使用replace(p_so_code,(',),(''',''),但没有成功。在p_so_代码中打破逗号分隔的值,返回多行值,然后在in子句中使用它 PROCEDURE get_one_so ( p_SO_CODE in String, RES OUT SYS_REFCURSOR ) AS BEGIN OPEN RES FOR SELECT
p\u so\u code
添加多值,其中so在(A,B,C)
中
我尝试了使用
replace(p_so_code,(',),(''','')
,但没有成功。在p_so_代码中打破逗号分隔的值,返回多行值,然后在in
子句中使用它
PROCEDURE get_one_so (
p_SO_CODE in String,
RES OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN RES FOR
SELECT
so.so_code as SOCODE,
cus.customer_code as CUSTOMERCODE,
cus.customer_name as CUSTOMERNAME,
cus.email as EMAIL,
so.receiver_name as RECEIVERNAME,
so.receiver_phone as RECEIVERPHONE,
so.receiver_address as RECEIVERADDRESS,
so.commment as COMMMENT,
s.name as STAFFCREATE,
to_char( so.CREATED_DATE,'dd/mm/yyyy') as CREATEDDATE,
st.name as STAFFUPDATE,
to_char(so.updated_date,'dd/mm/yyyy') as UPDATEDATE,
sapp.name as STAFFAPPROVE,
status,
so.reason_reject as REASONREJECT,
so.payment as PAYMENY,
to_char(so.send_date,'dd/mm/yyyy') as SENDDATE,
to_char(so.sended_date,'dd/mm/yyyy') as SENDEDATE,
so.staff_comment as STAFFCOMMENT
FROM
saleorders so join customer cus on so.customer_code = cus.customer_code
left join saleorderDetail sod on so.so_code = sod.so_code
left join staff s on so.staff_create = s.staff_code
left join staff st on so.staff_update = st.staff_code
left join staff sapp on so.STAFF_APPROVE = sapp.staff_code
WHERE
so.so_code IN (SELECT regexp_substr(p_so_code, '[^,]+', 1, LEVEL)
FROM dual
connect by regexp_substr(p_SO_CODE, '[^,]+', 1, level) is not null);
END;
说“这不管用”没有多大帮助;最好解释一下到底发生了什么以及为什么这不是你想要的。p_so_code
是否必须是字符串,或者是否可以将参数的数据类型更改为集合??同样,它显示打开一个ref光标;以及如何使用集合。可能重复的
PROCEDURE get_one_so (
p_SO_CODE in String,
RES OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN RES FOR
SELECT
so.so_code as SOCODE,
cus.customer_code as CUSTOMERCODE,
cus.customer_name as CUSTOMERNAME,
cus.email as EMAIL,
so.receiver_name as RECEIVERNAME,
so.receiver_phone as RECEIVERPHONE,
so.receiver_address as RECEIVERADDRESS,
so.commment as COMMMENT,
s.name as STAFFCREATE,
to_char( so.CREATED_DATE,'dd/mm/yyyy') as CREATEDDATE,
st.name as STAFFUPDATE,
to_char(so.updated_date,'dd/mm/yyyy') as UPDATEDATE,
sapp.name as STAFFAPPROVE,
status,
so.reason_reject as REASONREJECT,
so.payment as PAYMENY,
to_char(so.send_date,'dd/mm/yyyy') as SENDDATE,
to_char(so.sended_date,'dd/mm/yyyy') as SENDEDATE,
so.staff_comment as STAFFCOMMENT
FROM
saleorders so join customer cus on so.customer_code = cus.customer_code
left join saleorderDetail sod on so.so_code = sod.so_code
left join staff s on so.staff_create = s.staff_code
left join staff st on so.staff_update = st.staff_code
left join staff sapp on so.STAFF_APPROVE = sapp.staff_code
WHERE
so.so_code IN (SELECT regexp_substr(p_so_code, '[^,]+', 1, LEVEL)
FROM dual
connect by regexp_substr(p_SO_CODE, '[^,]+', 1, level) is not null);
END;