I need to return multiple values in function
create or replace function f (p) in varchar2) return varchar2is
a number (10);
Start
for loop 1 in 1.10
Select instr('yyyyyyyyynnnnnyynny','y',1,i) in the doubles.
end loop;
return a;
end;
my function return a value, but I need to return multiple values
Thanks in advance
I don't know if that's what you want (you should give expected results also)
SQL> create or replace type mytabletype as table of number;
2 /
Type created.
SQL> create or replace function f (p in varchar2) return myTableType pipelined is
2 a number(10);
3 begin
4 for i in 1..10 loop
5 select instr('yyyyyyyyynnnnnyynny','y',1,i) into a from dual;
6 pipe row (a);
7 end loop;
8 end;
9 /
Function created.
SQL> select * from table(f('1'));
COLUMN_VALUE
------------
1
2
3
4
5
6
7
8
9
15
10 rows selected.
SQL>
Published by: Leo Mannhart on March 22, 2011 11:01
could even be compressed into
create or replace function f (p in varchar2) return myTableType pipelined is
begin
for i in 1..10 loop
pipe row (instr('yyyyyyyyynnnnnyynny','y',1,i));
end loop;
end;
Tags: Database
Similar Questions
-
Return multiple values from a function in a SELECT statement
I hope I've provided enough information here. If not, let me know what I'm missing.
I create a view that will combine the information from several tables. Most are pretty simple, but there are a couple of columns in the view that I need to get by running a function within a package. Even if this is quite simple (I have a function named action_date in a package called rp, for example, that I can use to return the date that I need through SOME rp.action_date (sequence_number).
Here is the question: I really need to return several bits of information of the same record (not only action_date, but also action_office, action_value, etc.)-a join of the tables will work not here, as I will explain below. I can, of course, perform a function separate for each statement, but this is obviously inefficient. Within the select statement of the view, however, I don't know how each of the values that I need to get back.
For example, right now, I have:
Table 1:
sequence_number NUMBER (10),
name varchar (30),
...
Table2:
Table1_seq NUMBER (10),
action_seq NUMBER (10),
action_date DATE,
action_office VARCHAR (3),
action_value VARCHAR (60),
...
I can't just simply join Table1 and Table2 because I have to perform processing in order to determine the rows returned matching, I really need to select. If the package opens a cursor and treats each line until it finds the one I need.
The following works but is ineffective since all calls to the package returns the columns of the same record. I don't know how to put all the values that I need in the SELECT statement.
CREATE VIEW all_this_stuff AS
SELECT sequence_number, name,
RP.action_date (sequence_number) action_date,
RP.action_office (sequence_number) action_office,
RP.action_value (sequence_number) action_value
FROM table1
Is there a way to return multiple values in my SELECT statement or I'm going about this all wrong?
Any suggestions?
Thank you very much!Hello
What you want is a Query of Top - N , what you can do using the ROW_NUMBER analytic function in a subquery, like this:
WITH got_rnum AS ( SELECT action_seq, action_dt, action_office, action_type, action_value , ROW_NUMBER () OVER ( ORDER BY action_date , action_seq , action_serial ) AS rnum FROM table2 WHERE action_code = 'AB' AND action_office LIKE 'E' -- Is this right? ) SELECT action_seq, action_dt, action_office, action_type, action_value FROM got_rnum WHERE rnum = 1 ;
As written, this returns a single line (at most).
I suspect you'll actually get a rank for each group , where a group is defined by a value in a table in which you join.
In this case, add a PARTITION BY clause to the ROW_NUMBER function.
If post you a small example of data (CREATE TABLE and INSERT statements), I could show you exactly how.
As I don't have your tables, I'll show you the use of the tables in the scott schema.
This is a view containing data in the scott.dept table and also to scott.emp, but only for the highest employee in each Department (in other words, the employee whose oldest hire date). If there be a tie for the first hire date, while the candidate with the lowest empno is selected.CREATE OR REPLACE VIEW senior_emp AS WITH got_rnum AS ( SELECT d.deptno , d.dname , e.empno , e.ename , e.hiredate , ROW_NUMBER () OVER ( PARTITION BY d.deptno ORDER BY e.hiredate , e.empno ) AS rnum FROM scott.dept d JOIN scott.emp e ON d.deptno = e.deptno ) SELECT deptno , dname , empno , ename , hiredate FROM got_rnum WHERE rnum = 1 ; SELECT * FROM senior_emp ;
Output:
. DEPTNO DNAME EMPNO ENAME HIREDATE ---------- -------------- ---------- ---------- --------- 10 ACCOUNTING 7782 CLARK 09-JUN-81 20 RESEARCH 7369 SMITH 17-DEC-80 30 SALES 7499 ALLEN 20-FEB-81
Moreover, one of the conditions to the query you posted has been
action_office LIKE 'E'
which equals
action_office = 'E'
(AS is always equivalent to = if the string that follows AS does not contain the winning cards.)
Did you mean say that or did you mean something like this:action_office LIKE 'E%'
Instead?
-
What subprogramme should we prefer to return multiple values with OUT parameter?
Hello
I worked on the procedures and functions, and aware of their differences. Today I have an interview question that - suppose I don't have return multiple values through a subroutine and I want nor run any what DML within this subprogramme and I want to use this subprogramme in the SQL query. What subprogramme I would prefer - "Operating Mode" or "Function" and why?
In my view, both can be used in this case, but want to see your views and opinions.
Kind regards
Sachin jerbi
In terms of software engineering, if you claim something that you expect to "return" something (a value or values) then you use a function. If you call something to "do" something, and then you use a procedure.
THE settings are not good practices in many cases and should not strictly considered "return" of values. Instead, they are assigned values in the code and generally act as pointers to the original variable/structure that was passed as a parameter (the actual internals of Oracle don't quite do it, but in principle this is what they do).
A return value (or structure) of a function is basically push in the battery to the point that the RETURN statement is issued, and then the code calling the stack appears to assign it to a variable or placeholder, it should go in.
If it seems a little difference between procedures and functions to some people, it is recommended to use functions for obtaining values and procedures to do things, in most cases. It is not just "syntactic sugar", as mentioned above.
-
Plugin to point that returns multiple values
When you create an APEX element that can return multiple values, such as a checkbox, APEX uses the settings of varchar2 p_v01 - p_v200 instead of the p_t01 table settings - p_t200.
I would like to create a plugin item type that can return multiple values in the same way, so that the session recorded for the item state contains a delimited string of values. I realize, I could achieve with Javascript and a hidden item, but I really want to a non-Javascript solution. Is this possible? If this isn't the case, it would be a nice improvement!
Hi Tony,.
Take a look at the level of the parameter p_is_multi_value of the APEX_PLUGIN. GET_INPUT_NAME_FOR_PAGE_ITEM api (http://docs.oracle.com/cd/E37097_01/doc.42/e35127/apex_plugin.htm#AEAPI1254). If you set it to TRUE, you will get one of the p_v01 - p_v200 table settings. It's the same what our box element type calls.
Concerning
Patrick
Member of the APEX development team
My Blog: http://www.inside-oracle-apex.com
APEX Plug-Ins: http://apex.oracle.com/plugins
Twitter: http://www.twitter.com/patrickwolf
-
Return multiple values from a table
Hi there I'm working on a bit of sql that returns values when they exist in a table.
The code I have returns the correct value when there is an entry in the tbl_studentmodules table, as soon as there is more than one entry in this table it does display no line at all: (.)
Can someone tell how to return multiple values?
Thanks in advance!select modulename from tbl_modulefeedback where 1 = (select count(*) from tbl_studentmodules where upper(:APP_USER) = upper(student_id)) and 1 = (select count(*) from tbl_modulefeedback, tbl_studentmodules where tbl_modulefeedback.modulecode = tbl_studentmodules.modulecode)
AshleighTry this:
select modulename from tbl_modulefeedback where 1 <= (select count(*) from tbl_studentmodules where upper(:APP_USER) = upper(student_id)) and 1 <= (select count(*) from tbl_modulefeedback, tbl_studentmodules where tbl_modulefeedback.modulecode = tbl_studentmodules.modulecode)
When you ask questions, please enter CREATE TABLE and INSERT some commands to make it easier to help you.
-
Return multiple values at once of the listOfValues region
Friends,
I created a (listOfValues) region that has 4 fields/columns
ResponsibilityName, ResponsibilityId, ApplicationName, ApplicationId
I assigned a responsibility field ResponsibilityName of the listOfValues in a page.
It works fine when I select a value in this LOV. It returns a value to the field of 'Responsibility' of the page.
Is it possible to return the other 3 fields so while selecting ResponsibilityName in LOV. for example while you select a value for the field 'Responsibility', can the LOV return ResponsibilityId LOV to the 'ResponsibilityId' field in the page, at the same time?
1 selection can return values 1 to the fields?You can return multiple values in the LOV. Simply create a result to the mapping of the array element Lov to the basic element of page. Once you select a value from the LOV, the element of basic page could get filled in with the value on the table of lov whereby it has been mapped.
Concerning
Sumit -
I called the procedure as belowcreate procedure emp_p ( v_r OUT emp%rowtype ) AS Begin select * into v_r from emp; end;
Errordeclare v_x emp%rowtype; Begin emp_p(v_x); end;
declare
*
ERROR on line 1:
ORA-01422: exact fetch returns more than number of lines
ORA-06512: at "SYS." EMP_P', line 4
ORA-06512: at line 4 level
Thank you
REDAinfant_raj wrote:
create procedure emp_p ( v_r OUT emp%rowtype ) AS Begin select * into v_r from emp; end;
OUT parametere v_r could contain data for one line only, so if your query
Select * into v_r from emp
returns multiple rows, you're bound to get "ORA-01422: exact fetch returns more than number of lines.
You can use SYS_REFCURSOR or Collections instead.
Vivek L
-
Hello
I have a report that uses apex_item.checkbox (...) to generate the check box. This report correctly displays a check box for each line. The source code that is generated in the html page is:
< input type = "checkbox" name = "f01" value = "202" id = "P1_CHECKBOX" / >
...
...
< input type = "checkbox" name = "f01" value = "220" id = "P1_CHECKBOX" / >
...
...
< input type = "checkbox" name = "f01" value = "210" id = "P1_CHECKBOX" / >
...
...
I want to use the javascript function $v () to get the values of the enabled check box. I thought that the return of this function all the checked values separated by ':' but I noticed that my code alert ($v ('P1_CHECKBOX')); return whenever the value of the first checkbox if it is checked.
It returns '202' if the first box is checked, but nothing, if only the second checkbox is checked and '202' if the box of the first and the second is checked.Hello
first of all, $v, $x and $s are supposed to not work for items on the page, not the columns in a table or manually generated HTML elements.
Secondly, I think that your HTML code is not correct, because each of your boxes has the same ID. But the ID must be unique in the DOM of the browser tree. Thus the different box should actually named P1_CHECKBOX_1... P1_CHECKBOX_3. Just look at what is actually generated for a page element real checkbox. BTW, I think that you should not name the checkbox as part of page elements, because they are not actually page elements. I think that this could be confusing for other developers.
Hope that helps
Patrick
-----------
My Blog: http://www.inside-oracle-apex.com
APEX 4.0 Plug-Ins: http://apex.oracle.com/plugins
Twitter: http://www.twitter.com/patrickwolf -
DB procedure / function can return multiple values in a PL/SQL block
Hi all
I have a problem returning to the exit procedure following in PL/SQL because I have SELECT INTO variable but with no output back in my PL/SQL block even if I turned it into a function.
. pls suggest.
CREATE OR REPLACE PROCEDURE nominations (p_start_date AS, p_end_date IN DATE)
IS
v_day_id PLS_INTEGER;
v_day_name VARCHAR2 (33);
v_day_date DATE;
BEGIN
SELECT (2 + (p_start_date + (LEVEL - 1) + LEVEL - 1 - TRUNK (LEVEL - 1 + 1, "IW" + p_start_date)) AS day_id
, TO_CHAR (LEVEL - 1, 'Day' + p_start_date) AS day_name
, TO_CHAR (LEVEL - 1, "DD-MM-RRRR" + p_start_date) AS day_date
IN v_day_id, v_day_name, v_day_date
OF THE DOUBLE
CONNECTION OF LEVEL < = 1 + p_end_date - p_start_date;
END;
/
Your insert would be something like this:
INSERT INTO PR_OPS_APPOINT_SETS (SPEC_CODE1, SPEC_CODE2, CLINIC_NO, SECTOR_ID, USER_ID, APPOINT_DATE)
SELECT r.SPEC_CODE1, r.SPEC_CODE2, r.CLINIC_NO, r.SECTOR_ID, USER, d.APPOINT_DATE
PR_OPS_CLINIC_RECS r
CROSS JOIN)
SELECT TO_DATE (TO_CHAR (LEVEL - 1, "MM/DD/RRRR" + p_start_date), "MM/DD/RRRR") AS APPOINT_DATE
OF THE DOUBLE
CONNECT BY LEVEL<= p_end_date="" -="" p_start_date="" +="">=>
) d
WHERE SPEC_CODE1 = p_SPEC_CODE1
AND SPEC_CODE2 = p_SPEC_CODE2
AND CLINIC_NO = p_CLINIC_NO
AND SECTOR_ID = P_SECTOR_ID;
In terms of getting the parameters p_SPEC_CODE1, p_SPEC_CODE2, p_CLINIC_NO, P_SECTOR_ID...? I don't have enough information on your part.
-
Function - return multiple values in a concatenated string
Hello
Is it possible for a function return a concatenated string (combining more than one number). I'm trying to return the purchase by the introduction and invoice_id number and code order number, but an invoice_id can have several PO with the same code number. I want to concatenate the PO numbers with commas, for example
10124, 10090, 10987
At the present time, the function returns NULL for those cases that have more than one purchase order number.
Thank youfunc_get_po(i.invoice_id, cc.code_combination_id) "PO No", func_get_po_requester(i.invoice_id, cc.code_combination_id, func_get_po(i.invoice_id, cc.code_combination_id)) "PO Requester",
Of course, this can be done without any problem.
If it returns NULL, then you must debug function and check the operating logic. I know that it will take a little of your time, but not problems with the logic of syntax and concatenation. -
Popup passing return multiple values
I have a form where the user can enter a street address information using 6 different areas (Street, city, postal Code,...) but I want the user to be able to click a button in this region which will launch a popup window. In this window, I have the same six fields, a submit button, and later, I'll have LOVs, probable. However, I want to be able to fill the six fields and click on the button, which closes the window popup and fill the six original fields on the page of the form with the information in the pop-up window.
I searched the forum and I tried two solutions, but none of them worked for me.
The first is a Doc official Apex of the Oracle's Web site: http://www.oracle.com/technology/products/database/application_express/howtos/how_to_create_custom_popups.html. I followed him completely, but the popup does not open. When I click on the button to open my popup, toward which it is said that my page provided no page to create a new branch, and if I do not provide a branch to my popup, it loads the page as a normal, and not as a popup.
Another strange thing is, when I use a text link, as
in onejavascript:callMyPopup('P1_ENAME','P1_JOB','P1_SAL');
Tag, I get a JavaScript error, but not with a button.<a href>
The second solution came from the site of Dene, but that didn't work either, because it seemed to be built to return a single value.
http://Apex.Oracle.com/pls/OTN/f?p=31517:50:240963430171201:RP:
Anyone know of a possible solution?
Thank you
MattI started from scratch and tried again the Oracle method. I can now popup window, but when I press 'Select' in the report, it doesn't do a thing.
Nevermind, it works now.
Published by: Shinnizle on March 11, 2010 14:57
-
ORA-06503: PL/SQL: function returned no value ORA-06512:
Hi all
SQL > set serveroutput on
SQL > CREATE OR replace FUNCTION qty_value (p_item_id number)
2 RETURN NUMBER
3 EAST
4 v_qty_arrival NUMBER;
5 BEGIN
6. SELECT THE CASE SENSITIVE OPTION
7. WHAT (SUM (b.quantity) - SUM (b.quantity_received)) < = 0 THEN 0
8 ELSE (SUM (b.quantity) - SUM (b.quantity_received))
9 END Qty_Arrival
10 INTO v_qty_arrival
Po_lines_all 11 a,
po_line_locations_all 12 b
13 WHERE a.po_line_id = b.po_line_id
14 AND a.item_id = p_item_id;
15 EXCEPTION
16 THEN THAN OTHERS THEN
17 v_qty_arrival: = NULL;
18 RETURN v_qty_arrival;
19 END qty_value;
20.
The function is created.
SQL >
SQL > select xxc_qty_arrivale (214960) double
2.
Select xxc_qty_arrivale (214960) double
*
ERROR on line 1:
ORA-06503: PL/SQL: function returned no value
ORA-06512: at the 'APPS '. XXC_QTY_ARRIVALE', line 19
Back AFTER using the exception block is fine as long as your code actually REACHED the exception block.
When there are no errors, then your code will not enter the exception block, but you still NEED to return a value, since it is what functions a function wants to return a value, that's what the functions are made for.
Spot the differences between the following 3 functions. Understand how they work.
The first function has only a return in the exception block but runs correctly. Result: error, because the back is missing in the code block.
The second function has a return in the exception block and one in the block of code and runs correctly. Result: no error, because the return is not missing in the code block.
The third function has a return in the exception block and one in the block of code and is forced into an error. Result: no error, because the return of the exception handler is used (instead of retriggering of the error, which you would normally do).
SQL > create or replace function myfunc
2 return number
3 as
4 start
5 dbms_output.put_line ('in the section of code');
6 null;
7 exception
8 then than others
9. can
10 dbms_output.put_line (' in the exception handler ' |) SQLERRM);
11 --
12 return 0;
13 --
14 end;
15.
The function is created.
SQL > select double myfunc;
Select double myfunc
*
ERROR on line 1:
ORA-06503: PL/SQL: function returned no value
ORA-06512: at "GHPLUS. MYFUNC", line 14
In the section of code
SQL > create or replace function myfunc
2 return number
3 as
4 start
5 dbms_output.put_line ('in the section of code');
6 null;
7 --
8 return 1;
9 --
10 exceptional
11 so that others
12. can
13 dbms_output.put_line (' in the exception handler ' |) SQLERRM);
14 --
15 return 0;
16 --
end 17;
18.
The function is created.
SQL > select double myfunc;
MYFUNC
----------
1
1 selected line.
In the section of code
SQL > create or replace function myfunc
2 return number
3 as
n number 4;
5. start
6 dbms_output.put_line ('in the section of code');
7 n: = 1/0; -force an error (zero divisor) to join the exception handler
8 --
9 return 1;
10-
exception 11
12 so that others
13. can
14 dbms_output.put_line (' in the exception handler ' |) SQLERRM);
15 --
16 return 0;
17 --
18 end;
19.
The function is created.
SQL > select double myfunc;
MYFUNC
----------
0
1 selected line.
In the section of code
In the handler for exception ORA-01476: divisor is equal to zero
SQL >
-
I can't have more than one value of function?
I hope all of you can point me to some introductory articles/documents on function.
I know the function is used to calculate a value and it always returns a single value.
I want to know I can get more than one value of function? If so please share a few lines of code
Hello
Certainly, you CAN define functions with OUT parameters. It is generally not advisable to do so, however. Working with settings, for example, can be called from SQL, among other useful things.
If you are wanting a function that returns multiple values, you would generally be
-create a procedure that has several OUT parameters
-create a function that returns a type of object that encapsulates the values that you want to return
How to make FUNCTION returns several columns and several outputs line
can functions return multiple values?
oracle function to return more than one value
You must give several values of function that can be found in Sql
-
Possible to contain variable multiple values?
Is it possible the variable contains multiple values?
In fact, I need to hold a multiple value multiple value.
Procedure:
Remove employee where empno in (#variable)
Table Employees: Informix
variable code #:
Select relieved_employee_id in the relieved_employees (return multiple values)
Employees table raised is in SQL SERVER
any other approach simple approach...
How can I approach my requriement?Hello
Is it possible the variable contains multiple values?
Usually variable ODI hold one value returned by a select query
Procedure:
Remove employee where empno in (#variable)
Table Employees: Informix
variable code #:
Select relieved_employee_id in the relieved_employees (return multiple values)
Employees table raised is in SQL SERVER
any other approach simple approach...
How can I approach my requriement?
You can try something simiral to the following
create an ODI procedure
Command on the source tab:
SQL SERVER technology
Logic diagram should point to your schema that contains the table of relieved_employeesquery: Select relieved_employee_id you relieved_employees EMP_ID
Target control on the tab:
Technology: Informix
Logic diagram should point to your schema that contains the employees tablequery: delete from employee where empno = #EMP_ID
This will make a loop through all the values returned by your query source and delete target.
Thank you
Fati -
Return a value of a DispatchEvent
I have a class of the custom event that looks like this:
package com.ascentify.components.eduspeak.events { import flash.events.Event; public class EduSpeakEvent extends Event { //Build Path Events public static const BUILD_PATH:String = "EduSpeakEvent.BuildPath"; public var param:Object; public function EduSpeakEvent(type:String, pParam:Object=null, bubbles:Boolean=false, cancelable:Boolean=false) { param = pParam; super(type, bubbles, cancelable); } public override function clone():Event { return new EduSpeakEvent( type, param ); } public override function toString():String { return formatToString( "EduSpeakEvent", "param", "type", "bubbles", "cancelable" ); } } }
This is so I can pass a value with my function.
In a class of event dispatcher, I have a function that is implemented to ship this event:
public function buildPath(relativePath:String):Object{ return dispatchEvent(new EduSpeakEvent(EduSpeakEvent.BUILD_PATH, {relativePath:relativePath})); }
It contains lines the problem. I can send a value to the event handler, but I need to return a value as well:
public function buildPath(e:EduSpeakEvent):String { var path:String = e.param.relativePath; try { // If input is an absolute path or URL, return it. if (isAbsolutePath(e.param.relativePath)) { return e.param.relativePath; } // get the current location var baseDir:String = ExternalInterface.call("ES_getBaseDirectory"); displayLoader._trace("baseDir = "+baseDir, true, true); // currently, always returns a concatenated path. if (e.param.relativePath.charAt(0) != "/" && e.param.relativePath.charAt(0) != "\\") { e.param.relativePath = "/" + e.param.relativePath; } path = baseDir + e.param.relativePath; } catch (e:Error) { var errMsg:String = "[Exception occurred during 'buildPath']: " + e.message; displayLoader._trace(errMsg,true,true); } return path; }
Can I get a return on my eventdispatch function value?
The event system is not designed to return values and you really shouldn't use events to do. Event are for the notification, not function calls. Events can have several listeners, so how could they all return a value? However, if you really want to, your listener could define a field of the event (say event.result) object that you can then interview after the return of dispatchEvent (event).
BTW, why you go your way as an object rather than a string or anything actually?
Gordon Smith
Adobe Flex SDK team
Maybe you are looking for
-
Suddenly, my mac mini stop reading my other devices. Now, it but won't sync devices.
-
cannot forward or reply to emails. Need to start a new message.
Having just upgraded to El Capitan, I find I can't answer or transfer emails from Apple Mail. I just get a black enamel without data included original box. I checked the preferences and everything looks ok in there.
-
Allow traffic from port 80 to 1 single ip address
I block port 80 for all PCs, but it looks like I'll have to open up to a single address for our hosted service proxy filtered correctly display the block page. (They have improved their systems and I don't understand why it must be open, sort of def
-
FreeCell game number 31784 continues to appear
Number31784 game Freecel always appears when I go to this game.
-
How the system repair and recovery is possible in windows vista Home premium which is preinstalled on toshiba satellite model? because I havn't windows disk.