[英]Convert oracle query to stored procedure for SQL Server Reporting Services (SSRS)
How can I convert this query to a stored procedure that returns also the same(fields) table: 如何将该查询转换为还返回相同(字段)表的存储过程:
SELECT R.REGION_NAME,
TP.TERRITORY_NAME,
LSC.LOOKUP_NAME,
CAST (WM_CONCAT (CM.CUST_NAME) AS VARCHAR2 (500)) AS CUST_NAMES,
TP.VIEWER_PROFILE,
TP.CASTING_PREFERENCE,
TP.PROG_TYPE_PREFERENCE,
STN_LIST.STN_NAMES,
STN_LIST.LIC_RIGHTS
FROM TERRITORY_PROFILE_MSTR TP
INNER JOIN
REGION_MSTR R
ON TP.REGION_ID = R.REGION_ID
LEFT OUTER JOIN
LOOKUP_SUB_CATEGORY LSC
ON TP.BROADCAST_STD_CD = LSC.LOOKUP_SUB_CAT_ID
LEFT OUTER JOIN
CUST_MSTR CM
ON CM.TERRITORY_ID = TP.TERRITORY_ID
LEFT OUTER JOIN
(SELECT CAST (WM_CONCAT (SLR.CUST_STN_NAME) AS VARCHAR2 (500))
AS STN_NAMES,
CAST (WM_CONCAT (LRM.LIC_RIGHTS_ID) AS VARCHAR2 (500))
AS LIC_RIGHTS,
SLR.CUST_COMPETITOR_ID AS CUST_ID
FROM STN_LIC_RIGHTS SLR, LIC_RIGHTS_MSTR LRM
WHERE SLR.STN_LIC_ID = LRM.LIC_RIGHTS_ID
GROUP BY SLR.CUST_COMPETITOR_ID) STN_LIST
ON STN_LIST.CUST_ID = CM.CUST_ID
WHERE TP.TERRITORY_ID <> 0
GROUP BY TP.TERRITORY_NAME,
R.REGION_NAME,
LSC.LOOKUP_NAME,
STN_LIST.STN_NAMES,
STN_LIST.LIC_RIGHTS,
TP.VIEWER_PROFILE,
TP.CASTING_PREFERENCE,
TP.PROG_TYPE_PREFERENCE
ORDER BY R.REGION_NAME, TP.TERRITORY_NAME
I think I don't need to specify the table structure. 我想我不需要指定表结构。 Please take note that the query is fully functional and the values are correctly return the way I expect it to return.
请注意,该查询功能齐全,并且值正确返回了我希望它返回的方式。
Thank you. 谢谢。
UPDATE: 更新:
The stored procedure must be compatible and executable in ASP.NET(C#) through SQL Server Reporting Services or SSRS. 该存储过程必须是兼容的,并且可以通过SQL Server Reporting Services或SSRS在ASP.NET(C#)中执行。
There are a few ways to do what you're asking: 有几种方法可以满足您的要求:
and probably more... 可能还有更多...
You can create a PL SQL procedure that returns a ref cursor. 您可以创建一个返回引用游标的PL SQL过程。
CREATE OR REPLACE
PROCEDURE foo(p_terr_id IN TERRITORY_PROFILE_MSTR.TERRITORY_ID%TYPE,
p_recordset out SYS_REFCURSOR)
AS
BEGIN
OPEN p_recordset FOR
/* Your SQL here */
END foo;
/
Nobody mentioned any alternative to my question like the use of Oracle VIEWS
. 没有人提到我的问题的替代方案,例如使用Oracle
VIEWS
。
Instead of creating a stored procedure for my SSRS reports, I can use VIEWS
though they don't have any parameters, it answers my question. 除了可以为我的SSRS报告创建存储过程之外,我还可以使用
VIEWS
尽管它们没有任何参数,但可以回答我的问题。
For future reference here's the code: 以下代码是供将来参考:
CREATE VIEW RV_TERRITORY_PROFILE
AS
SELECT R.REGION_NAME,
TP.TERRITORY_NAME,
LSC.LOOKUP_NAME,
CAST (WM_CONCAT (CM.CUST_NAME) AS VARCHAR2 (500)) AS CUST_NAMES,
TP.VIEWER_PROFILE,
TP.CASTING_PREFERENCE,
TP.PROG_TYPE_PREFERENCE,
STN_LIST.STN_NAMES,
STN_LIST.LIC_RIGHTS
FROM TERRITORY_PROFILE_MSTR TP
INNER JOIN
REGION_MSTR R
ON TP.REGION_ID = R.REGION_ID
LEFT OUTER JOIN
LOOKUP_SUB_CATEGORY LSC
ON TP.BROADCAST_STD_CD = LSC.LOOKUP_SUB_CAT_ID
LEFT OUTER JOIN
CUST_MSTR CM
ON CM.TERRITORY_ID = TP.TERRITORY_ID
LEFT OUTER JOIN
(SELECT CAST (WM_CONCAT (SLR.CUST_STN_NAME) AS VARCHAR2 (500))
AS STN_NAMES,
CAST (WM_CONCAT (LRM.LIC_RIGHTS_ID) AS VARCHAR2 (500))
AS LIC_RIGHTS,
SLR.CUST_COMPETITOR_ID AS CUST_ID
FROM STN_LIC_RIGHTS SLR, LIC_RIGHTS_MSTR LRM
WHERE SLR.STN_LIC_ID = LRM.LIC_RIGHTS_ID
GROUP BY SLR.CUST_COMPETITOR_ID) STN_LIST
ON STN_LIST.CUST_ID = CM.CUST_ID
WHERE TP.TERRITORY_ID <> 0
GROUP BY TP.TERRITORY_NAME,
R.REGION_NAME,
LSC.LOOKUP_NAME,
STN_LIST.STN_NAMES,
STN_LIST.LIC_RIGHTS,
TP.VIEWER_PROFILE,
TP.CASTING_PREFERENCE,
TP.PROG_TYPE_PREFERENCE
ORDER BY R.REGION_NAME, TP.TERRITORY_NAME
then you can run it like 然后你可以像运行它
SELECT * FROM RV_TERRITORY_PROFILE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.