How to return multiple values
create procedure emp_p ( v_r OUT emp%rowtype )
AS
Begin
select * into v_r from emp;
end;
I called the procedure as below declare
v_x emp%rowtype;
Begin
emp_p(v_x);
end;
Errordeclare
*
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
REDA
infant_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
Tags: Database
Similar Questions
-
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 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
-
I need to return multiple values in function
create or replace function f (p) in varchar2) return varchar2
is
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 advanceI 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;
-
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 -
Another REGEXP question: how to extract multiple values from a string
Hi, how can I retrieve multiple values to a string with RegExp with Oracle SQL constructs?
Have looked at the various examples, I cannot understand this.
the following Sql code
Returns CN = A_role.select regexp_substr(sessie."rollen", 'CN=A_role') "A_role" from ( select ' CN=A_role,OU=a_org_unit,OU=another_org_unit,DC=bz,DC=ad,DC=min,DC=local CN=Another_role,OU=some_org_unit,DC=bz,DC=ad,DC=min,DC=local CN=Users,OU=Dep,DC=bz,DC=ad,DC=min,DC=local ' "rollen" from dual ) sessie;
I want him back all of the CN = concatenated values with a semicolon and stripped of the CN = bit.
So: A_role; Another_role; Users .
Any help would be much appreciated. Here I use database 11g 11.2.0.2.0.
Does anyone have an idea how to do this in SQL?
best regards MikeHello
If using Oracle 11 gwith tst as (select 'CN=A_role,OU=a_org_unit,OU=another_org_unit,DC=bz,DC=ad,DC=min,DC=local,' ||'CN=Another_role,OU=some_org_unit,DC=bz,DC=ad,DC=min,DC=local,' ||'CN=Users,OU=Dep,DC=bz,DC=ad,DC=min,DC=local' as rollen from dual ) select listagg(sub, ',') within group (order by rn) as res from (select regexp_substr(rollen, '(CN=)([[:alnum:]_]+)',1,rownum,'i',2) sub, rownum rn from tst connect by level <=length(rollen) ) where sub is not null
-
Hello:
How to configure contextual events publish several values of payload?
On click of a button, I'm declaritively publish a contextual event, which works very well when a single value is passed to the event handler.
My event handler method has the signature of:
eventHandler (String)
But now I also have an oracle.jbo.domain.Number, so my new eventHandler looks like this:
eventHandler (Number, String)
How to pass two values during editing of the event and how to place the payload with multiple values for the new eventHandler?
All article or code would be greatly appreciated.
Thanks for the help.You define a bean holding your values and pass an instance of the bean as a payload...
Timo
-
How to return the value 0 for no data using the County?
Hi all
I used this query to count the number of records for each month of the year:
SELECT DISTINCT COUNT (I.information_sid) COUNT, TO_DATE (TO_CHAR (INSERT_DATE, 'MM'), 'MM') MONTH
INFORMATION I
TO_DATE GROUP (TO_CHAR (INSERT_DATE, 'MM'), 'MM')
ORDER BY TO_DATE (TO_CHAR (INSERT_DATE, 'MM'), 'MM')
But this code returns no value for months without data
I want to return the value '0' for any month of data. How, please?
Note: I use reports 6i.Maybe this?
SELECT SUM(CNT_REC) CNT_REC, MONTH FROM ( SELECT COUNT(I.information_sid) CNT_REC, TO_DATE(TO_CHAR(INSERT_DATE,'MM'),'MM') MONTH FROM INFORMATIONS I GROUP BY TO_DATE(TO_CHAR(INSERT_DATE,'MM'),'MM') UNION ALL SELECT 0, LPAD(ROWNUM,2,0) FROM ALL_OBJECTS WHERE ROWNUM <= 12 ) GROUP BY MONTH ORDER BY MONTH
No need to SEPARATE during the use of GROUP BY.
-Clément
-
How to pass multiple values to a data model parameter
I have a data model, where I put a setting like this.
Select col1, col2, col3 from table1 where col1 =: param1
This works very well for a single value that I pass the param1 parameter.
How can I get this to work when I want to send multiple values for param1. I already checked the box "Multiple values" and tried to change the sql for this code.
Select col1, col2, col3 from table1 where col1 in: param1
Looks like I'm missing something here.
Thanks in advance!
Krisyou need to write it as:
Select col1, col2, col3 from table1 where col1 in (: param1)
It works for me.
Klaus
-
How to return two values of a function?
Hi all
I have a function which returns a varchar2 value. This value is used in the SQL of a ref cursor
Now I want this function returns two values. I tried to use varray, but could not accomplish the task.
Can you tell me how can I find the two values from a function? and how this function can be called in a SQL query?
Thank you very muchThe query should look like:
SELECT v.col.name AS name , v.col.flag AS flag FROM ( SELECT kk_test_kk(t.somecolumn,t.someothercolumn,42) AS col FROM sometable t ) v;
Note that you need to prefix with the name of view inline ('v' in the example) and the expression of the function ('col' in the example).
-
How to select multiple values in a single field.
Hi all
I once select stmt as below
==================================
SELECT msi.segment1,
IN l_chr_omc_item
OF SGM_INV_ITEM_ATTRIBUTES SIIA, msi mtl_system_items
WHERE msi.inventory_item_id = siia.inventory_item_id
AND siia.attribute12 = l_chr_tsb_item;
======================================
I need to print some l_chr_omc_item, but if the above query retrieves multiple values of the l_chr_omc_item for a l_chr_tsb_item so I need to print all the values. How to get all these values in a single rank.
Thanks in advance.
Published by: Shivaji M on June 28, 2009 23:18
Published by: Shivaji M on June 28, 2009 23:27cursor curGetxx (inpl_chr_tsb_item in SGM_INV_ITEM_ATTRIBUTES.attribute12%type)
is
SELECT
MSI. Segment1
Of
SGM_INV_ITEM_ATTRIBUTES SIIA
msi mtl_system_items
WHERE msi.inventory_item_id = siia.inventory_item_id
AND siia.attribute12 = inpl_chr_tsb_item;l_chr_omc_item SGM_INV_ITEM_ATTRIBUTES.attribute12%type;
vStrl_chr_omc_item varchar (500);Start
Open curGetxx (l_chr_tsb_item);
loop
extract the curGetxx in l_chr_omc_item;
When the output curGetxx % NOTFOUND;
vStrl_chr_omc_item: = concat (l_chr_omc_item, ',')
dbms_output.put_line (l_chr_omc_item);
end loop;
vStrl_chr_omc_item: = substr (vStrl_chr_omc_item, 1, length (vStrl_chr_omc_item)-1);
end;
/ -
How to display multiple values in the Email notification?
Hi all
I have a table in my page column, when I click on apply button changes, Notification email will be sent to the user with updated information.
In the notification email, I've included the text field, date field value, everything works fine and I can get by email with the details.
under select query that returns several value.i need to include these values in the notification e-mail.
Please suggest a solution.select distinct asset.NAME AA FROM ASSET_TBL asset join ENV_ASSET_MAP ENV ON ASSET.ID = ENV.ASSET_ID AND ENV.RESV_ID = :P24_ID
I tried the code below, but did not get any email!
Thank youdeclare l_body_html varchar2(4000); env_list apex_application_global.vc_arr2; i number:= 1; begin For enrow in (select distinct asset.NAME AA FROM ASSET_TBL asset join ENV_ASSET_MAP ENV ON ASSET.ID = ENV.ASSET_ID AND ENV.RESV_ID = :P24_ID) LOOP env_list(i):=enrow.AA ; i := i+1; end loop; return Apex_UTIL.TABLE_TO_STRING(env_list,':'); l_body_html := '<p><font size ="3" color = BLUE> <u> New Reservation Form</u></font> <br><br> <table> <tr><td> Selected Reservation : </td><td>'||env_list(i)||'</td></tr> </table><br><br> </p>'; apex_mail.send( p_to => '[email protected]', p_from =>'[email protected]', P_CC =>'[email protected]', P_BODY => l_body_html, P_BODY_HTML => l_body_html, p_subj => 'Notification Mail!'); wwv_flow_mail.push_queue(); EXCEPTION WHEN OTHERS THEN l_body_html := l_body_html || '. Error Occurred while sending email='||SQLERRM; apex_mail.send( p_to => '[email protected]', p_from => '[email protected]', P_CC => '[email protected]', P_BODY => l_body_html, P_BODY_HTML => l_body_html, p_subj => 'Notification Mail!'); wwv_flow_mail.push_queue(); end;
with respect,
Robette.Your process will end with the return on line 11 statement.
I think that instead of return you want to load a local variable you put int the body of the email. That is to say. See *.
declare l_body_html varchar2(4000); env_list apex_application_global.vc_arr2; i number:= 1; ******l_asset_name_list VARCHAR2(32767);* begin For enrow in (select distinct asset.NAME AA FROM ASSET_TBL asset join ENV_ASSET_MAP ENV ON ASSET.ID = ENV.ASSET_ID AND ENV.RESV_ID = :P24_ID) LOOP env_list(i):=enrow.AA ; i := i+1; end loop; *******l_asset_name_list :=* Apex_UTIL.TABLE_TO_STRING(env_list,':'); l_body_html := '
New Reservation Form
Selected Reservation : '||*******l_asset_name_list*||'
'; apex_mail.send( p_to => '[email protected]', p_from =>'[email protected]', P_CC =>'[email protected]', P_BODY => l_body_html, P_BODY_HTML => l_body_html, p_subj => 'Notification Mail!'); wwv_flow_mail.push_queue(); EXCEPTION WHEN OTHERS THEN l_body_html := l_body_html || '. Error Occurred while sending email='||SQLERRM; apex_mail.send( p_to => '[email protected]', p_from => '[email protected]', P_CC => '[email protected]', P_BODY => l_body_html, P_BODY_HTML => l_body_html, p_subj => 'Notification Mail!'); wwv_flow_mail.push_queue(); end;There may be other things to settle, these seem to be the main problem.
-
How to return the value of the SQL in the text element
Hi friends
I need you to guide me how I can print the return value of the SQL in a text element
Suppose it's your function
any help that I enjoyedcreate or replace function get_value return number is begin return 3*2; end; /
Thank you>
This is ORA-06502: PL/SQL: digital error or value.
Check the data type and size for items of text or any other variables or fields in the service.
Maybe you are looking for
-
Apple TV third gen) does not not on iMac
My third gen apple TV makes its appearance is more on airplay for my iMac since I've upgraded to El Capitan. They are on the same ethernet network and I did all the updates for both. I restarted the APPLETV and new but always unplugged/plugged in wil
-
I used to be able to display pdf documents using Adobe Reader instead of Firefox built in. I tried everything that you suggest and what Adobe suggest. I uninstalled and reinstalled Firefox. I uninstalled and reinstalled Adobe Reader (11.0.09). I went
-
How can I get rid of the pop-ups 'vulnerable', and is the version 3 really bad/insufficient year. I suspect that this is just a tactic for fear of selling new plug-ins, and I'm paranoid enough to believe that the mfgr. is likely to create "problems"
-
I was using firefox as my browser and all my favorites, history, tags etc. They are recoverable?
-
Satellite Pro C870-172: how to use the Fn keys by pressing the FN key
I recently bought a Satellite Pro C870-172 and I found that the FN key is used by default. I mean that if I need to use the normal F1 or F2 key, I have to press "FN" + F1 or F2 etc... otherwise I get the function of toshiba. which would be fine, but