how to return a dynamic result set in Oracle functionOracle SQL एक समारोह बनाने - त्रुटियों
मैं एक समारोह है कि कई तालिकाओं से कई मायने रखता है के साथ एक पंक्ति वापस आ जाएगी बनाने के लिए कोशिश कर रहा हूँ के आधार पर संकलित भ्रमित। यहाँ मैं अब तक है:
CREATE OR REPLACE TYPE RESULT_ROW is OBJECT
(LOC_TABLE_ENTRY_KY VARCHAR2(50),
LOCATION_NAME VARCHAR2(50),
A_ASSIGN_CNT VARCHAR2(50),
B_ASSIGN_CNT VARCHAR2(50),
C_ASSIGN_CNT VARCHAR2(50),
D_ASSIGN_CNT VARCHAR2(50),
E_ASSIGN_CNT VARCHAR2(50),
F_ASSIGN_CNT VARCHAR2(50),
G_ASSIGN_CNT VARCHAR2(50),
H_ASSIGN_CNT VARCHAR2(50));
/
CREATE OR REPLACE TYPE RESULT_TABLE AS TABLE OF RESULT_ROW;
/
CREATE OR REPLACE FUNCTION LOCATION_RULE_LOOKUP(P_LOCATION_VAR IN NUMBER)
RETURN RESULT_TABLE
IS
OUT_REC RESULT_TABLE;
BEGIN
WITH LOC AS
(SELECT LOC_TABLE_ENTRY_KY,
LOCATION_NAME
FROM LOCATION_CODE
WHERE LOC_TABLE_ENTRY_KY = P_LOCATION_VAR
),
ONE AS
(SELECT COUNT(*) AS A_ASSIGN_CNT
FROM COLLECTOR_ASSIGNMENT
WHERE LOCATION_CODE = P_LOCATION_VAR
AND FUNCTION_STATE_CODE = ' '
OR FUNCTION_STATE_CODE = '***'
),
TWO AS
(SELECT COUNT(*) AS B_ASSIGN_CNT
FROM COMM_PLAN_ASSGN_RULE
WHERE LOCATION_CODE = P_LOCATION_VAR
),
THREE AS
(SELECT COUNT(*) AS C_ASSIGN_CNT
FROM INPUT_TRANS_ASGN
WHERE LOCATION_CODE = P_LOCATION_VAR
),
FOUR AS
(SELECT COUNT(*) AS D_ASSIGN_CNT
FROM RECALL_DAYS_ASSGN_RULE
WHERE LOCATION_CODE = P_LOCATION_VAR
),
FIVE AS
(SELECT COUNT(*) AS E_ASSIGN_CNT
FROM SCRIPT_VIEW_ASSIGNMENT
WHERE LOCATION_CODE = P_LOCATION_VAR
AND FUNCTION_STATE_CODE = ' '
OR FUNCTION_STATE_CODE = '***'
AND SCRIPT_TYPE = 'V'
),
SIX AS
(SELECT COUNT(*) AS F_ASSIGN_CNT
FROM SCRIPT_VIEW_ASSIGNMENT
WHERE LOCATION_CODE = P_LOCATION_VAR
AND FUNCTION_STATE_CODE = ' '
OR FUNCTION_STATE_CODE = '***'
AND SCRIPT_TYPE = 'D'
),
SEVEN AS
(SELECT COUNT(*) AS G_ASSIGN_CNT
FROM TSR_ASSGN_RULE
WHERE LOCATION_CODE = P_LOCATION_VAR
),
EIGHT AS
(SELECT COUNT(*) AS H_ASSIGN_CNT
FROM TRAN_STATE_ASSGN_RULE
WHERE LOCATION_CODE = P_LOCATION_VAR
)
SELECT * INTO OUT_REC
FROM ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, LOC;
RETURN OUT_REC;
END LOCATION_RULE_LOOKUP;
लेकिन कोई बात नहीं क्या मैं इस मौजूदा समारोह उदाहरण की तरह लग रही है, दोनों यहाँ और अन्य साइटों पर बनाने के लिए क्या है, यह शुरू ब्लॉक के भीतर कुछ भी स्वीकार नहीं करता। BEGIN ब्लॉक के अंदर एसक्यूएल काम करता है; मैं उन सभी को एएस चयन आदि के साथ चला सकता हूं और यह मुझे एक पंक्ति दे देगा जिसके परिणामस्वरूप मैं देख रहा हूं। लेकिन यह फ़ंक्शन संकलित नहीं होगा। जहां मैं एक जगह या अर्धविराम डालता हूं, इस पर निर्भर करता है कि त्रुटियां बदलती हैं। वर्तमान त्रुटियां:
Error(7,3): PL/SQL: SQL Statement ignored
Error(62,3): PL/SQL: ORA-00947: not enough values
सहायता? डी:
हे, यही वह चीज़ है जो मुझे समझ में नहीं आता है। आपको परेशान करने के लिए माफी चाहता हूं। वे मुद्दे वास्तव में थे - अब काम करता है। :) –
माफी माँगने की कोई ज़रूरत नहीं है। मुझे खुशी है कि यह आपके लिए काम कर रहा है। :-) – ruakh