Reputation: 8431
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.
Upvotes: 2
Views: 2397
Reputation: 8431
Nobody mentioned any alternative to my question like the use of 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.
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
Upvotes: 1
Reputation: 38179
You can create a PL SQL procedure that returns a ref cursor.
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;
/
More details and examples here
Upvotes: 1