Forum Discussion
Getting data using Procedure by using the SYS_REFCURSOR.
- Anonymous1 year ago
Hi Sobha,
You areusing a multi-value parameter ":prSubscriber" in Power BI, which works fine when a single value is selected. However, when multiple values are selected, you're encountering these errors.
This happens because Power BI passes each selected value as a separate parameter. So, if you select three values, Power BI tries to pass them as three separate parameters, but your stored procedure expects a single parameter. This mismatch leads to the errors you're seeing.
To handle multiple values, you can modify your stored procedure to accept a comma-separated string and then parse it into individual values within the procedure. You can do it by :
* First create a function to split the Comma-Separated string.CREATE OR REPLACE FUNCTION split_string(p_list IN VARCHAR2)
RETURN SYS.ODCIVARCHAR2LIST
AS
l_list SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
l_index PLS_INTEGER := 1;
l_pos PLS_INTEGER := 0;
l_str VARCHAR2(4000) := p_list;
l_item VARCHAR2(4000);
BEGIN
LOOP
l_pos := INSTR(l_str, ',', l_index);
EXIT WHEN l_pos = 0;
l_item := TRIM(SUBSTR(l_str, l_index, l_pos - l_index));
l_list.EXTEND;
l_list(l_list.COUNT) := l_item;
l_index := l_pos + 1;
END LOOP;
l_item := TRIM(SUBSTR(l_str, l_index));
IF l_item IS NOT NULL THEN
l_list.EXTEND;
l_list(l_list.COUNT) := l_item;
END IF;
RETURN l_list;
END;* Now modify your stored procedure to use the split function.
CREATE OR REPLACE PROCEDURE DORIS.XYZ_collections_select_test(
prBeginDate IN VARCHAR2 := '2024',
pGroupID IN VARCHAR2 := NULL,
prSubscriber IN VARCHAR2,
c_direct_reports OUT SYS_REFCURSOR
)
AS
l_subscribers SYS.ODCIVARCHAR2LIST;
BEGIN
l_subscribers := split_string(prSubscriber);OPEN c_direct_reports FOR
SELECT *
FROM your_table
WHERE subscriber_id IN (SELECT COLUMN_VALUE FROM TABLE(l_subscribers));
END;* Now adjust your PowerBi report. You will need to concatenate the selected values into a single comma-separated string before passing them to the stored procedure. You can do it in your Power BI report, by creating a new parameter (e.g., prSubscriberString) that concatenates the selected values "Text.Combine(prSubscriber, ",")". Use this prSubscriberString parameter when calling the stored procedure.
By modifying your stored procedure to accept a comma-separated string and adjusting your Power BI report to pass the selected values as such, you should be able to handle multi-value parameters without encountering the binding errors.
If I misunderstand your needs or you still have problems on it, please feel free to let us know.
Best Regards,
Hammad.
Community Support Team
Hi Sobha,
As we haven’t heard back from you, so just following up to our previous message. I'd like to confirm if you've successfully resolved this issue or if you need further help.
If yes, you are welcome to share your workaround and mark it as a solution so that other users can benefit as well. If you find a reply particularly helpful to you, you can also mark it as a solution.
If you still have any questions or need more support, please feel free to let us know. We are more than happy to continue to help you.
Thank you for your patience and look forward to hearing from you.
Hi
But Idea of collections works.
My Issue is not really solved.I have some difficulty in populating the collection variable
Thanks