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

oracle存储过程查询多表的问题。
CREATE OR REPLACE PROCEDURE Clerk_HandheldDevices_GetList
(
SCANTIME_IA NVARCHAR2,
SCANTIME_IB NVARCHAR2,
sitename_IN NVARCHAR2,
devicetype_IN NVARCHAR2,
V_CS OUT SYS_REFCURSOR
)
AS
BEGIN

OPEN V_CS FOR
SELECT devicemac,sitename,username from pda_devicelist;
OPEN V_CS FOR
SELECT count(SCANHAWB)as SCANHAWB FROM pda_scandata_disp WHERE SCANTIME>=TO_DATE(SCANTIME_IA,'yyyy-mm-dd hh24:mi:ss') and SCANTIME<=TO_DATE(SCANTIME_IB,'yyyy-mm-dd hh24:mi:ss') and scanstation=sitename_IN and devicetype=devicetype_IN;
OPEN V_CS FOR
SELECT count(SCANHAWB)as SCANHAWB from pda_scandata_sign where scantime>=to_date(SCANTIME_IA,'yyyy-mm-dd hh24:mi:ss') and scantime<=to_date(SCANTIME_IB,'yyyy-mm-dd hh24:mi:ss') and scanstation=sitename_IN and devicetype=devicetype_IN;
OPEN V_CS FOR
SELECT count(SCANHAWB)as SCANHAWB from pda_scandata_sign where scantime>=to_date(SCANTIME_IA,'yyyy-mm-dd hh24:mi:ss') and scantime<=to_date(SCANTIME_IB,'yyyy-mm-dd hh24:mi:ss') and scanstation=sitename_IN and devicetype=devicetype_IN and SCANHAWB='10';
OPEN V_CS FOR
SELECT count(SCANHAWB)as SCANHAWB from pda_scandata_sign where scantime>=to_date(SCANTIME_IA,'yyyy-mm-dd hh24:mi:ss') and scantime<=to_date(SCANTIME_IB,'yyyy-mm-dd hh24:mi:ss') and scanstation=sitename_IN and devicetype=devicetype_IN and SCANHAWB='11';
RETURN ;

END;

以上是我写的代码,只能输出一个字段,我想的是查询几张表就输出几个!也就是
devicemac,sitename,username,SCANHAWB,SCANHAWB,SCANHAWB,SCANHAWB
这么几个现在值出现了一个SCANHAWB这样的字段我需要改哪里???;
oracle 存储 date

------解决方案--------------------
你的过程只会返回最后一个 open v_cs for 的查询结果。

你只要写一个open v_cs for 查询语句   就行了。先把这个查询语句改好了吧。
------解决方案--------------------
你这个过程的输出是个cursor,但是因为你在过程内的5个语句使用了同一个游标变量,所以相当于连续对一个变量赋值5次——当然只有最后一次被保留……

如果你想要多个结果,可能需要使用5个出参

------解决方案--------------------
引用:
你这个过程的输出是个cursor,但是因为你在过程内的5个语句使用了同一个游标变量,所以相当于连续对一个变量赋值5次——当然只有最后一次被保留……

如果你想要多个结果,可能需要使用5个出参


对头