Query to return multiple rows
Hi all,
I've a requirement where in I've to get multiple rows from a query.
The resultset should be something like this:
SELECT A
FROM dual;
A
1
2
3
4
5
6
7
8
9
10
Thanks in anticipation
RK Raju
I'm not completely certain I understand the question. Just in case you're asking for something as simple as this ...
select rownum from all_objects where rownum <= 10;You didn't say what version you were using either (shame on you). You could use a collection or a pipeline depending on your version ...
create or replace type ttab_number is table of number;
create or replace function f_collection
return ttab_number is
tab_number ttab_number := ttab_number();
begin
for i in 1 .. 10 loop
tab_number.extend;
tab_number(tab_number.count) := i;
end loop;
return tab_number;
end f_collection;
select *
from table(f_collection)
create or replace function f_pipeline
return ttab_number
pipelined is
begin
for i in 1 .. 10 loop
pipe row(i);
end loop;
return;
end f_pipeline;
show errors
select *
from table(f_pipeline)
Similar Messages
-
The simplest way for plsql procedure to return multiple rows
Hi,
What is the simplest way for plsql procedure to return multiple rows (records). There are many combination of ways to do it but I am looking for a solution that is appropriate for plsql beginners. Many solutions use cursors, cursor variables, collections and more that kind of things that are complex on the face of it. Is it somehow possible to achieve the same with less effort?
Sample query would be: SELECT * FROM EMPLOYEES;
I want to use returned rows in APEX to compose APEX SQL(in that context plsql) report.
It is enough to use just SELECT * FROM EMPLOYEES query in APEX but I want to use plsql procedure for that.
Thank you!Hi,
It depends :-).
With +...that is appropriate for plsql beginners...+ in mind... it still depends!
The list of techniques (ref cursors, cursor variables, collections, arrays, using explict SQL) you have referenced in your post can be made to work. but...
+Is it somehow possible to achieve the same with less effort?+ Less effort : That needs to be defined (measured). Especially in the context of pl/sql beginners (who is a beginner?) .
What is the level of "programming experience" ?
What is the level of understanding of "Relational Result set" as processible in Oracle?
If you are looking for
Process_the_set_of rows_in APEX () kind of capabilitywhich "abstracts/hides" relation database from developers when working on relation database, it may not be the best approach (at least strategically). Because I believe it already is abstracted enough.
I find REF CUROSOR most effective for such use, when the "begginer" has basic understanding of processing SQL result set .
So in a nut shell, the techniques (that you already are familiar with) are the tools available. I am not aware of any alternative tools (in pure Oracle) that will simplify / hide basics from develpers.
vr,
Sudhakar B. -
TimesTen SQL with group by returning multiple rows
I have a Active-Standby TimesTen nodes.
Using group by with or without having clause:
Whenever I do a group by query on table1 table with or without having clause, SQL returns multiple rows. This looks very strange to me. Each time it gives different count
Command> select count(*) from table1 group by pname having pname='pool';
< 390400 >
1 row found.
Command> select count(*) from table1 group by pname having pname='pool';
< 390608 >
< 32639 >
2 rows found.
Command> select count(*) from table1 group by pname having pname='pool';
< 2394 >
< 351057 >
2 rows found.
Command> select count(*) from table1 group by pname having pname='pool';
< 305732 >
1 row found.
Command> select count(*) from table1 group by pname having pname='pool';
< 420783 >
1 row found.
Command> select count(*),pool_name from root.rms_address_pools group by pool_name order by pool_name;
< *435473, pool* >
< *32313, pool* >
< 453, smvG3 >
< *28980, pool* >
< 3786, smvG4 >
< *26025, pool* >
< 236120, smvG6 >
< 131455, smcG3 >
< *65150, pool* >
< 23, snt1G1 >
< 510, snt2G1 >
< 510, snt2G2 >
Using where clause:
Command> select count(*) from table1 where pname='pool';
< *442354* >
1 row found.
Command> select count(*) from table1 where pname='pool';
< 442354 >
1 row found.
Table description:
Command> desc table1;
Table table1:
Columns:
*IP_ADDRESS BIGINT NOT NULL
PNAME CHAR (32) NOT NULL
SITEID TINYINT NOT NULL
1 table found.
ttVersion:
bash-3.00# ./ttVersion
TimesTen Release *7.0.3.1.0 (64 bit Solaris)* (tt70:17001) 2007-10-30T22:17:07Z
Instance admin: root
Instance home directory: /TimesTen/tt70
Daemon home directory: /var/TimesTen/tt70
bash-3.00#
Could any one suggest what is wrong with my SQL? or is it a bug with TimesTen?
Many thanks in advance.
Br,
BrijHi Gena,
When i execute the query with where clause, it gives me the output with more than one pool:
Command> select pname, count (*) from table1 where pname='pool' group by pname ;
< smcG3 , 18836 >
< pool , 423527 >
2 rows found.
Command> select pname, count (*) from table1 where pname='pool' group by pname ;
< intG302 , 17202 >
< pool , 425159 >
2 rows found.
While if give use the having clause it gives me multiple rows for one pool only ( sometimes) :
select pname, count (*) from table1 group by pname having pname='pool';
< pool , 32686 >
< pool , 420445 >
2 rows found.
select pname, count (*) from table1 group by pname having pname='pool';
< pool , 393574 >
< pool , 5838 >
< pool , 110943 >
3 rows found.
Command> select pname, count (*) from table1 group by pname having pname='pool';
< pool , 414590 >
< pool , 8395 >
2 rows found.
Please suggest what can be done in this case, need i open a case with Oracle for this.
Regards, Brij -
How to create a function that returns multiple rows in table
Dear all,
I want to create a funtion that returns multiple rows from the table (ex: gl_balances). I done following:
-- Create type (successfull)
Create or replace type tp_gl_balance as Object
PERIOD_NAME VARCHAR2(15),
CURRENCY_CODE VARCHAR2(15),
PERIOD_TYPE VARCHAR2(15),
PERIOD_YEAR NUMBER(15),
BEGIN_BALANCE_DR NUMBER,
BEGIN_BALANCE_CR NUMBER
-- successfull
create type tp_tbl_gl_balance as table of tp_gl_balance;
but i create a function for return some rows from gl_balances, i can't compile it
create or replace function f_gl_balance(p_period varchar2) return tp_tbl_gl_balance pipelined
as
begin
return
(select gb.period_name, gb.currency_code, gb.period_type, gb.period_year, gb.begin_balance_dr, gb.begin_balance_cr
from gl_balances gb
where gb.period_name = p_period);
end;
I also try
create or replace function f_gl_balance(p_period varchar2) return tp_tbl_gl_balance pipelined
as
begin
select gb.period_name, gb.currency_code, gb.period_type, gb.period_year, gb.begin_balance_dr, gb.begin_balance_cr
from gl_balances gb
where gb.period_name = p_period;
return;
end;
Please help me solve this function.
thanks and best reguardhi,
Use TABLE FUNCTIONS,
[http://www.oracle-base.com/articles/9i/PipelinedTableFunctions9i.php]
Regards,
Danish -
Pl/sql block returning multiple rows
Hi,
I've created a plsql block which obtains an id from a name and then uses this id in another sql statement. The select statement to get the id works fine and the correct id is placed into the variable awardID.
when i try to use this variable in another select statement it returns multiple rows. but when i just use the id in the select statement it works fine.
select AwardID into awardID
from award_objtabA
where Name = awardName;
this returns the correct id '5999'
select Points into award_points
from award_objtabA
where AwardID = awardID;
this returns multiple rows
select Points into award_points
from award_objtabA
where AwardID = 5999;
this works fine
can anybody help with this confusing error?
Cheersselect AwardID
into awardID <= the same column
from award_objtabA
where Name = awardName;
this returns the correct id '5999'
select Points
into award_points
from award_objtabA
where AwardID = awardID; <= the same column
this returns multiple rows
to solve use different name not exactly the same as that of the column name
select AwardID
into vAwardID
from award_objtabA
where Name = awardName;
select Points
into award_points
from award_objtabA
where AwardID = vAwardID;as Alex and Kamal have suggested use different name for your variable. -
Problem with database control returning multiple rows as Array using Oracle
Has anybody using Oracle gotten a Database control that
returns multiple rows to work returning an array?
The only way I can seem to return multiple rows is by returning
a RowSet. Returning an array gives me a NullPointerException
(when called within a pageFlow). When calling a database control
that returns an array from a web service I get a
"java.sql.SQLException: ResultSet has no more data." error.
The samples using the pointbase database seem to work, but when I
converted the CustomerDBClient web service to use Oracle, it starts
failing on calling the database control that returns an array
with: "java.sql.SQLException: ResultSet has no more data."
Has anybody gotten this to work using Oracle?
I'm also having some problem returning an Iterator. It seems
to work when called from a web service, but returns nothing
if called from a page flow.
I'm using Oracle 8.1.7 and WebLogic 8.1.
EricDo you need a particular service pack installed to return an array of custom object?
I am getting a ResultSet contained no data error when trying.
Thanks,
-Thomas
"Robin Karlin" <[email protected]> wrote:
>
Eddie O'Neil <[email protected]> wrote:
All--
Unfortunately, returning an Iterator to a JPF (or JSP) from a
database control is broken in WLW 8.1, though it will work inside of
a
JWS or JCS.
There shouldn't be a problem with returning an array of objects out
of Oracle to the JPF, and if you need an Iterator specifically, youcan
wrap the array in an Iterator implementation.
Sorry for the inconvenience.
Eddie
Lenny wrote:
I have gotten it to work on Oracle using Array:)
However, I haven't gotten it to work on Oracle using Iterator:( Itis so
simple, but doesn't work:(
"Eric Dokken" <[email protected]> wrote in message
news:[email protected]...
Has anybody using Oracle gotten a Database control that
returns multiple rows to work returning an array?
The only way I can seem to return multiple rows is by returning
a RowSet. Returning an array gives me a NullPointerException
(when called within a pageFlow). When calling a database control
that returns an array from a web service I get a
"java.sql.SQLException: ResultSet has no more data." error.
The samples using the pointbase database seem to work, but when I
converted the CustomerDBClient web service to use Oracle, it starts
failing on calling the database control that returns an array
with: "java.sql.SQLException: ResultSet has no more data."
Has anybody gotten this to work using Oracle?
I'm also having some problem returning an Iterator. It seems
to work when called from a web service, but returns nothing
if called from a page flow.
I'm using Oracle 8.1.7 and WebLogic 8.1.
Eric
I get the same error that Eric reported when trying to return an Array
of objects.
It is really frustrating because I can't use much of the built-in control
logic
that WLW provides. All I did was create a data pool for Oracle and a
datasource.
I modified the sample app in C:\bea81\weblogic81\samples\workshop\SamplesApp\WebApp\callJavaControl
to point to that datasource and I get the error that Eric reports above.
Can
anyone help me out????
Thanks,
Robin -
Query is returning multiple records for a bank account id and party id
Hi All,
I am not getting why this query is returning multiple records for a particular bank account id and party id:
SELECT instrument_payment_use_id
,instrument_type
,instrument_id
,start_date
,ext_pmt_party_id
FROM iby_pmt_instr_uses_all
WHERE instrument_id =:lv_num_ext_bank_account_id
and exists (select 1 from iby_external_payees_all b where PAYEE_PARTY_ID= :lv_num_party_id and b.ext_payee_id = ext_pmt_party_id)
I want above values to be used in api iby_disbursement_setup_pub.set_payee_instr_assignment in R12.
Please help asap.
ThanksO/P of query run for
SELECT rowid, instrument_payment_use_id
FROM iby_pmt_instr_uses_all
WHERE instrument_id =6642
AND EXISTS (
SELECT 1
FROM iby_external_payees_all b
WHERE payee_party_id= 85470
AND b.ext_payee_id = ext_pmt_party_id);
is below:
Rowid INSTRUMENT_PAYMENT_USE_ID
AABiDXAGIAABhiKAAS 236586
AABiDXAGRAABSjtAAz 148437
The version is R12 -
Human Workflow Task XPath query string returns multiple nodes.
I am looking for trouble shooting help for this error. I am no sure if it is a server or jdev issue.
I am running JDev version 10.1.3.3 and console version 10.1.3.1.0 locally.
General information on the BPEL process:
I have a temporary table in Oracle lite that I created items to be review by the user. I created a synchronous BPEL process. The first step in developing this process, I created the straight forward invoke the table to get the records, transform the records with a change the approve flag = "Y", and invoke the table to update the records. Works like a charm. I followed the online tutorial by dropping a human task after the transform, configured the parameters, setup the assignments, and moved the invoke to update table under the approved condition. If the table has only one record, the process runs great but if there are two records I get the following error message.
<selectionFailure xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"><part name="summary"><summary>XPath query string returns multiple nodes.
According to BPEL4WS spec 1.1 section 14.3, The assign activity part and query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr should not return multipe nodes.
Please check the BPEL source at line number "178" and verify the part and xpath query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr.
</summary>
</part></selectionFailure>
=================
The error occurs in the first assign of the Human task after the assign copies the fields for the title. I underlined line number 178.
<correlationSets>
<correlationSet name="WorkflowTaskIdCor"
properties="taskservice:taskId"/>
</correlationSets>
<sequence>
<assign name="HumanTask1_1_AssignTaskAttributes">
<copy>
<from expression="concat(ora:getProcessURL(), string('/HumanTask1/HumanTask1.task'))"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:taskDefinitionURI"/>
</copy>
<copy>
<from expression="number(3)"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:priority"/>
</copy>
<copy>
<from>
<payload xmlns="http://xmlns.oracle.com/bpel/workflow/task">
<Case xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<CourtDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ErrorMessage xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ItemName xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<Payment xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<Zip xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProcessFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<LastUpdated xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<AddedDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<CityAttnyAmount xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ApprovalFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProlawKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProcessKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
</payload>
</from>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:payload"/>
</copy>
<copy>
<from expression="concat(string('Item Fee Approval '), bpws:getVariableData('Invoke_1_Select_RecordsSelect_OutputVariable','TempItemCollection','/ns3:TempItemCollection/ns3:TempItem/ns3:ItemName'))"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:title"/>
</copy>
<copy>
<from variable="Invoke_1_Select_RecordsSelect_OutputVariable"
part="TempItemCollection"
query="/ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:payload/task:Item"/>
</copy>
<copy>
Thank you for any help you can give me.Here is how I solved this problem: I was told by the metalink folks that I should use the same verion of SOA console as jdev. So I went back to jdev 10.1.3.1. Rather than reading from the Oracle lite table, I dumped the table into a flat file. I read flat file and populated the workflow. Remember to set the 'messages in batch' flag in the file adapter to 1 and the number of records to skip to zero in the format builder for the flat file. The process now reads each record and creates an instance for that each record. In other words, if I have 8 records in my flat file, I will have 8 instances of the process running on the console. Thanks Jeremy for your help figuring this out.
Edited by: user7725126 on Nov 19, 2009 3:56 PM -
Error: XPath query string returns multiple nodes
Hi all,
I am facing issue with the assign activity.
Error message:
com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.xmlsoap.org/ws/2003/03/business-process/}selectionFailure} parts: {{ summary=<summary>*XPath query string returns multiple nodes. The assign activity part and query are returning multiple nodes. The assign activity part and query named in the error message returned multiple nodes. It should return single node. According to BPEL4WS specification 1.1 section 14.3, the assign activity part and query named in the error message should not return multiple nodes. Verify the part and xpath query named in the error message at line number 2005 in the BPEL source*.
BPEL code:
<copy>
<from variable="Invoice_Tax_loopCounter"/>
<to variable="Var_Invoice_Tax_Contacts" part="payload" query="/ns30:Invoice_Tax_Contacts/ns30:Invoice/ns29:Get_InvoiceOutput[bpws:getVariableData'Invoice_Tax_loopCounter')]/ns29:ADDR_ATTRIBUTE2"/>
</copy>
We are using SOA 11.1.1.3 version.
Any pointers on this?
Thanks in advanceHi-
This is because you are have multiple nodes either in source or target XML.
My guess is some nodes of your XML might be repeating (means a single element/node has multiple values). Can you please check that or please post your XML here.
Edited by: 145678 on Mar 7, 2011 6:28 PM -
JDeveloper + WebServices, RETURN multiple rows from pl/sql
I need to return multiple rows from pl/sql procedure or function and publish it as a Web Service through JDeveloper.
I try to use ref cursor, but then found that it is impossible to use ref cursor as a return value in Web Services.
Please, help me to achieve result.Hello. I tried to make commands from article, but got errors
"C:\Program Files\Java\jdk1.6.0_18\bin\java" -jar D:\oracle\Middleware\oracle_common\modules\oracle.webservices_11.1.1\wsa.jar -plsqlAssemble -appName Echo -sql wo -dataSource jdbc/OracleManagedDS -dbConnection jdbc:oracle:thin:@192.168.246.2:1521:data -dbUser syd/manager -style rpc -use encoded
Error: Interface oracle.generated.wo: The class could not be loaded from the class path. -
Custom database functoid to return multiple rows from database
Hi,
I have created a custom database fucntoid to execute a stored procedure which returns just single row from the database.But I could not manage to return multiple rows from the database.
Does anyone know how to return multiple rows from DB and create a node with that many occurrences in the target schema?
Thanks
JBIf you want to do this in messaging-only way without orchestration, then only option let to you is using .NET in BizTalk:
We had similar requirement with one of our clients, where they didn’t want to use orchestration (though we emphasised on less impact orch would have compared to manageability),
they still wanted to have pure-messaging only.
We extended the custom XslTransform component that ships with BizTalk SDK (<BizTalk installation directory>\SDK\Samples\Pipelines\XslTransformComponent)).
Created a custom disassembler pipeline component, used the XslTransform component from SDK to execute the map’s XSLT. Here we created a map with every links except the database ones. After executing the map, access the database, execute the store procedure
which returns more than one row/dataset, enrich the XSLT transformed message with the dataset from your database in disassembler.
Since .NET gives you the flexibility of access the dataset with more than one row, you can enrich the message in custom pipeline code.
Other option is code the message transformation completely in .NET code in custom disassembler by passing the received message to method/code which would code the map/enrichment.
While enriching you can execute the store procedure which returns more than one row/dataset, enrich the message further with the dataset from db.
If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply. -
Procedure from PowerBuilder returning multiple rows
In want to call a procedure from PowerBuilder which return multiple rows. I would like to know how to write the procedure and also how to call it. I tried using REFCURSOR , but i heard that Powerbuilder doesnot support REFCURSOR . Please help
Thanks in advanceThis is not a PL/SQL qustion, but a Powerbuilder question.
Just what SQL constructs does Powerbuilder supports? And if there is no support for ref cursors, then the choice of using a client language that lacks basic core SQL support is questionable. -
Print Child SQL which is returning multiple rows to single colum.
I have a requirement to print both Parent and Child SQLs rows to single row.
For Ex:
Parent row is returning single row
Id, Name, Primary Rate.
101, LName,FName ,30
Child row is returning multiple rows
Id, Name, Secondary Rate
101, LName,FName,15
101, LName,FName,10
The end result should be
101,LName,FName,30,15,10
Any suggestions please?Below is the XML TAG
<LIST_EMPLOYEERATE>
<EMPLOYEERATE>
<EMPNUMBER>112</EMPNUMBER>
<EMPNAME>Aaron</EMPNAME>
<PAYRATE>38.09</PAYRATE>
<JOBNAME>Technician</JOBNAME>
<EMPTYPE>Salary</EMPTYPE>
<LIST_ADDRATE>
<ADDRATE>
<ADDPAYRATE>26</ADDPAYRATE>
</ADDRATE>
<ADDRATE>
<ADDPAYRATE>7.9</ADDPAYRATE>
</ADDRATE>
</LIST_ADDRATE>
</EMPLOYEERATE>
</LIST_EMPLOYEERATE>
The Result should be (assume this is going onto excel spread sheet)
EmpNum EmpName Rate EmpType Rate1 Rate2
112 Aaron 38.09 Salary 26 7.9
Using @inline we are able to get 26 and 7.9 on the same line, but how to push 7.9 to next column?
Thanks! -
PL-SQL Returning multiple rows
hi all
i am using an oracle 8i database.My front end application is a JSP code which calls an oracle procedure.How do i pass a pl-sql table or an equivalent to a jave code since the procedure has to return multiple rows.i have been told that the jdbc driver version
(1.0) which we are using does not support this.
should i go about it differently and use temporary tables?..please help
thanks
LAhi all
i am using an oracle 8i database.My front end application is a JSP code which calls an oracle procedure.How do i pass a pl-sql table or an equivalent to a jave code since the procedure has to return multiple rows.i have been told that the jdbc driver version
(1.0) which we are using does not support this.
should i go about it differently and use temporary tables?..please help
thanks
LA -
Querying view gives multiple rows
I have a query that returns duplicate rows (5) when I write the query this way:
"Select *
from view v
, table_A a
where v.key = a.key"
However, if I write the query this way, the correct data is returned, i.e., only one row.
"Select *
from (select * from view v)
,table_A a
where v.key = a.key"
It also works correctly if I put the in-line view in the select portion of the select statement.
Any ideas?
Thank you for your help,
TriciaWith the second query, I get "ORA-00904: "V"."KEY": invalid identifier". Are you sure that it ran ok for you? v.key is out of scope in the where clause...
If I label the subselect as v, I get the same result as the first query - 5 rows.
Message was edited by:
Boneist
(I can't spell)
Maybe you are looking for
-
How can i find out which Macbook is the right one for me?
I am looking into buying anew laptop and I'm currently considering a macbook as oppose to a windows laptop. which one is the right one for me? 1. I will be using it for my work at college and university so it will need to have a reasonable amount of
-
Can this iMovie program do anything at all????
I am frustrated, I have bunch older iMovie files and none of them can be opened, my USB camcorder can't be recognized by the program, all I see is myself in the little import box looking frustrated, what does this iMoive program do anyway? This is no
-
Cleared Invoice should not allow to cancel.
Dear All I have posted one invoice with reference to sales order. My finance team also cleared that invoice. Now System is allowing me to cancel the invoice document.But i dont want to allow people to cancel cleared invoice. How to achieve this. Kind
-
I have restored my desktop a1744x and when i went to activate my product key it says its invalid
need help
-
Only one delivery to be allowed against one Sales order at item level
Hi, I have a requirement for some material in sales order if SO quanity is 25 we want that system should allow to create delivery of all 25 quanity one time we try to use Max.Part.Deliv. at item level by amking as 1 but system is juts giving t