Error single row subquery
Hi all,
I m getting error ORA-01427 single row subquery return more than one row when i execute the below query.
could some one help me in writing the below query
update dvd_genre set GENRE_I = (select GENRE_I from dvd_gen_data
where mov_name in (select mov_name from dvd_genre group by mov_name))
where mov_name in (select mov_name from dvd_gen_data group by mov_name)rgds
Saaz
see:
SQL> select * from a;
IDX CNAME
1 e
2 f
SQL> select * from b;
IDX CNAME
1 c
2 d
1 e
2 f
SQL>
SQL> update a set cname=(
2 select cname from b
3 where idx=a.idx
4 );
update a set cname=(
select cname from b
where idx=a.idx
ORA-01427: single-row subquery returns more than one row
SQL>
SQL> update a set cname=(
2 select cname from (
3 select idx,max(cname) cname from b
4 group by idx
5 )
6 where idx=a.idx
7 );
2 rows updated
SQL> select * from a;
IDX CNAME
1 e
2 fEdited by: Garey on 2009-10-7 下午11:47
Similar Messages
-
Error single row subquery returns multiple values
Hi All,
I have a below query. This is query is throwiing error like single row subquery is returing more than number of records. That subquery is in my SELECT statement query. I have a value like 'tests'. That test contains more than one record. I am fetching that 'tests' child values from this query. If the test contains only one child at that time it is working fine. Can anyone share with how update this query?
SELECT
czpn.FEATURE_TYPE,
czci.PS_NODE_NAME,
DECODE(czci.VALUE_TYPE_CODE,2,czci.ITEM_VAL,
3, NVL((SELECT
lines_config.PS_NODE_NAME
FROM
CZ_CONFIG_ITEMS lines_config
WHERE
lines_config.PARENT_CONFIG_ITEM_ID = czci.CONFIG_ITEM_ID
AND lines_config.CONFIG_HDR_ID = czci.CONFIG_HDR_ID
AND lines_config.CONFIG_REV_NBR = czci.CONFIG_REV_NBR),
DECODE(czci.ITEM_NUM_VAL,1,'',czci.ITEM_NUM_VAL)),
0,NVL(czci.ITEM_NUM_VAL,'')) NODE_VALUE
FROM
CZ_CONFIG_ITEMS czci,
CZ_PS_NODES czpn
WHERE
czpn.PERSISTENT_NODE_ID = czci.PS_NODE_ID
AND czci.CONFIG_HDR_ID = 1827349
AND czci.CONFIG_REV_NBR = 1
--AND czci.VALUE_TYPE_CODE <> 4
AND czpn.FEATURE_TYPE IS NOT NULL
--AND czci.PS_NODE_ID = 356474
AND czpn.DEVL_PROJECT_ID = (SELECT MAX(ps_devl1.DEVL_PROJECT_ID) FROM CZ_DEVL_PROJECTS ps_devl1, CZ_PS_NODES ps_devl, CZ_CONFIG_ITEMS ps_config_sub
WHERE (ps_devl.PERSISTENT_NODE_ID = ps_config_sub.PS_NODE_ID
AND ps_config_sub.PARENT_CONFIG_ITEM_ID = (SELECT ps_config_sub1.CONFIG_ITEM_ID FROM CZ_CONFIG_ITEMS ps_config_sub1
WHERE ps_config_sub.CONFIG_HDR_ID = ps_config_sub1.CONFIG_HDR_ID
AND ps_config_sub.CONFIG_REV_NBR = ps_config_sub1.CONFIG_REV_NBR
AND ps_config_sub1.PS_NODE_NAME = 'ACCESSORIES'))
AND ps_devl1.DEVL_PROJECT_ID = ps_devl.REFERENCE_ID
AND ps_config_sub.CONFIG_HDR_ID = czci.CONFIG_HDR_ID
AND ps_config_sub.CONFIG_REV_NBR = czci.CONFIG_REV_NBR)
AND czci.PS_NODE_NAME = 'tests'ThanksHello,
This should work:
SELECT
czpn.FEATURE_TYPE,
czci.PS_NODE_NAME,
DECODE(czci.VALUE_TYPE_CODE,2,czci.ITEM_VAL,
3, NVL((SELECT
lines_config.PS_NODE_NAME
FROM
CZ_CONFIG_ITEMS lines_config
WHERE
lines_config.PARENT_CONFIG_ITEM_ID = czci.CONFIG_ITEM_ID
AND lines_config.CONFIG_HDR_ID = czci.CONFIG_HDR_ID
AND lines_config.CONFIG_REV_NBR = czci.CONFIG_REV_NBR
AND ROWNUM <= 1),
DECODE(czci.ITEM_NUM_VAL,1,'',czci.ITEM_NUM_VAL)),
0,NVL(czci.ITEM_NUM_VAL,'')) NODE_VALUE
FROM
CZ_CONFIG_ITEMS czci,
CZ_PS_NODES czpn
WHERE
czpn.PERSISTENT_NODE_ID = czci.PS_NODE_ID
AND czci.CONFIG_HDR_ID = 1827349
AND czci.CONFIG_REV_NBR = 1
--AND czci.VALUE_TYPE_CODE 4
AND czpn.FEATURE_TYPE IS NOT NULL
--AND czci.PS_NODE_ID = 356474
AND czpn.DEVL_PROJECT_ID = (SELECT MAX(ps_devl1.DEVL_PROJECT_ID) FROM CZ_DEVL_PROJECTS ps_devl1, CZ_PS_NODES ps_devl, CZ_CONFIG_ITEMS ps_config_sub
WHERE (ps_devl.PERSISTENT_NODE_ID = ps_config_sub.PS_NODE_ID
AND ps_config_sub.PARENT_CONFIG_ITEM_ID = (SELECT ps_config_sub1.CONFIG_ITEM_ID FROM CZ_CONFIG_ITEMS ps_config_sub1
WHERE ps_config_sub.CONFIG_HDR_ID = ps_config_sub1.CONFIG_HDR_ID
AND ps_config_sub.CONFIG_REV_NBR = ps_config_sub1.CONFIG_REV_NBR
AND ps_config_sub1.PS_NODE_NAME = 'ACCESSORIES'))
AND ps_devl1.DEVL_PROJECT_ID = ps_devl.REFERENCE_ID
AND ps_config_sub.CONFIG_HDR_ID = czci.CONFIG_HDR_ID
AND ps_config_sub.CONFIG_REV_NBR = czci.CONFIG_REV_NBR)
AND czci.PS_NODE_NAME = 'tests'Where this is restricting the records returned by your columnar subquery to one record with ROWNUM. -
Getting Error - Single-row subquery returns more than 1 row (Help Needed)
I have the following SQL. It selects several rows of data. This data reflects changed records. I want to update PS_UNI_TEXTBK_SKEW for the values selected. Any ideas. For updating I used:
update ps_uni_textbk_skew s
set (s.ssr_txbdtl_title, s.ssr_txbdtl_isbn, s.ubs_skew_num, s.process_date, s.ubs_rec_type) = (
and then I included theselect listed below. (this selects does work). It always produces an error saying 'singl-row subjquery returns more than 1 row'.
Any help would be appreciated. I've worked on this for a week now trying many different ways. Thanks, Mary
SELECT NOW.SSR_TXBDTL_TITLE
,NOW.SSR_TXBDTL_ISBN
,0
,SUBSTR(SYSDATE,1,8)
,'C'
FROM
SELECT C.SUBJECT||C.CATALOG_NBR||C.CLASS_SECTION||C.STRM||B.SSR_TXBDTL_SEQNO AS TYINGKEEN
,C.CRSE_ID
,C.CRSE_OFFER_NBR
,C.STRM
,C.SUBJECT
,C.CATALOG_NBR
,C.CLASS_SECTION
,C.DESCR
,B.SSR_TXBDTL_SEQNO
,B.SSR_CRSEMAT_TYPE
,B.SSR_TXBDTL_STATUS
,B.SSR_TXBDTL_TITLE
,B.SSR_TXBDTL_ISBN
,B.SSR_TXBDTL_AUTHOR
,B.SSR_TXBDTL_PUBLISH
,B.SSR_TXBDTL_EDITION
,B.SSR_TXBDTL_PUBYEAR
,B.SSR_TXBDTL_NOTES
FROM PS_CLASS_TBL C,
PS_SSR_CLS_TXB_DTL B
WHERE C.CRSE_ID = B.CRSE_ID
AND C.CRSE_OFFER_NBR = B.CRSE_OFFER_NBR
AND C.STRM = B.STRM
AND C.CLASS_SECTION = B.CLASS_SECTION
) NOW,
SELECT SUBJECT||CATALOG_NBR||CLASS_SECTION||STRM||SSR_TXBDTL_SEQNO AS TYINGKEEL
,CRSE_ID
,CRSE_OFFER_NBR
,STRM
,SUBJECT
,CATALOG_NBR
,CLASS_SECTION
,DESCR
,SSR_TXBDTL_SEQNO
,SSR_CRSEMAT_TYPE
,SSR_TXBDTL_STATUS
,SSR_TXBDTL_TITLE
,SSR_TXBDTL_ISBN
,SSR_TXBDTL_AUTHOR
,SSR_TXBDTL_PUBLISH
,SSR_TXBDTL_EDITION
,SSR_TXBDTL_PUBYEAR
,SSR_TXBDTL_NOTES
FROM PS_UNI_TEXTBK_SKEW
) LAST
WHERE NOW.TYINGKEEN = LAST.TYINGKEEL
AND (NOW.SSR_TXBDTL_TITLE <> LAST.SSR_TXBDTL_TITLE
OR NOW.SSR_TXBDTL_ISBN <> LAST.SSR_TXBDTL_ISBN
OR NOW.SSR_TXBDTL_AUTHOR <> LAST.SSR_TXBDTL_AUTHOR
OR NOW.SSR_TXBDTL_PUBLISH <> LAST.SSR_TXBDTL_PUBLISH
OR NOW.SSR_TXBDTL_EDITION <> LAST.SSR_TXBDTL_EDITION
OR NOW.SSR_TXBDTL_PUBYEAR <> LAST.SSR_TXBDTL_PUBYEAR
OR NOW.SSR_TXBDTL_NOTES <> LAST.SSR_TXBDTL_NOTES
OR NOW.SSR_TXBDTL_STATUS <> LAST.SSR_TXBDTL_STATUS
OR NOW.SSR_CRSEMAT_TYPE <> LAST.SSR_CRSEMAT_TYPE
OR NOW.DESCR <> LAST.DESCR);1. Take your subqueries
2. Run those separately to see if they really can return more than one row. If needed modify the subquery by adding GROUP-BY and HAVING-COUNT>1 clauses to determien that.
3. If you see more than one row coming up from subqueries then the error message you named will arise.
This is what i would do.
But in first look you don't have subqueries, you have "inline-views". so i don't understand how the eroor could occur.
Edited by: CharlesRoos on 22.10.2010 16:38 -
*URGENT ORA-01427 single row subquery
I am trying to do this:
UPDATE projectdetails SET projectdetails.projectname=
(SELECT projectid FROM project WHERE projectdetails.projectname = project.projectname);
but it returns with the error: single row subquery returns more than 1 row.
I tried in the same PROJECTDETAILS table with another table A3, it works fine. but not for the PROJECT table.
Below is the project table (i have 2055 rows)
projectid
projectname
1
NEWEST
2
PARK WEST
3
THE VISION
4
PEOPLE'S PARK CENTRE
5
REFLECTIONS AT KEPPEL BAY
6
THE CLIFT
7
CLEMENTIWOODS CONDOMINIUM
8
HUNDRED TREES
9
PASIR VIEW PARK
10
CARABELLE
11
PARC IMPERIAL
below is the projectdetails table:
Projectname
CORALS AT KEPPEL BAY
2024750
2294
883
Strata
1
01 to 05
Jun-13
99 yrs lease commencing from 2007
1
CORALS AT KEPPEL BAY
2786880
1890
1475
Strata
1
01 to 05
Jun-13
99 yrs lease commencing from 2007
1
CORALS AT KEPPEL BAY
1525050
2180
700
Strata
1
01 to 05
Jun-13
99 yrs lease commencing from 2007
1
ECHELON
2162980
1647
1313
Strata
1
21 to 25
Jun-13
99 yrs lease commencing from 2012
1
WHITEHAVEN
1356000
1285
1055
Strata
1
01 to 05
Jun-13
Freehold
1Hi ,
UPDATE projectdetails SET projectdetails.projectname=
(SELECT projectid FROM project WHERE projectdetails.projectname = project.projectname);
For any query, to test and excecute do as follow.
Break the query like
1. UPDATE projectdetails SET projectdetails.projectname=
2. (SELECT projectid FROM project WHERE projectdetails.projectname = project.projectname);
Run the select statement and you can identify ..
as the error defines the select statement is getting more than 1 value.
3. Check the 'Where' conditions each and every line, by commenting line by line and running the query.
You can resolve step by step, be confident bro we are with you.
I suggest you before updating all the rows, just try to update one row and test, if its working fine and you can update all.
Regards,
Afzal. -
Single-row subquery returns more than one query
Hi,
i'm receiving the following error: Single-row subquery returns more than one query. I have no idea how I should debug this query. For all I know, the subqueries can only return 1 row... :S
I only have Oracle SQL Developer to run/test my queries. I can run the query with ROWNUM < 5000, which gives no errors. If I run with ROWNUM > 5000 and ROWNUM < 6000 then the error appears....
Here's the query:
with
DATES as
(select (select min(REC_DATE) from STOCK) as FROM_DT, (select max(CHANGE_DATE) from STOCK_ADJUST) as TO_DT from DUAL),
MONTHS as
(select add_months(trunc(FROM_DT,'MM'),ROWNUM-1) as DT from DATES connect by ROWNUM <= months_between(TO_DT, FROM_DT)+1),
CALCULATIONS as
(select
PNM.PNM_AUTO_KEY PNM_KEY,
MONTHS.DT DT,
NVL((select sum(stm.qty_rec) from stock stm WHERE STM.REC_DATE < MONTHS.DT AND STM.PNM_AUTO_KEY = PNM.PNM_AUTO_KEY GROUP BY pnm_auto_key),0) INCOMING,
NVL((select sum(saj.qty_adj) from stock_adjust saj
inner join stock stm on saj.stm_auto_key = stm.stm_auto_key
inner join parts_master pnm on stm.pnm_auto_key = pnm.pnm_auto_key where SAJ.CHANGE_DATE < MONTHS.DT AND STM.PNM_AUTO_KEY = PNM.PNM_AUTO_KEY group by pnm_auto_key),0) OUTGOING
from MONTHS, PARTS_MASTER PNM)
SELECT
ROWNUM, CALCULATIONS.PNM_KEY PNM_AUTO_KEY, CALCULATIONS.DT COUNT_DATE,CALCULATIONS.INCOMING QTY_RECEIVED, CALCULATIONS.OUTGOING QTY_USED, (CALCULATIONS.INCOMING + CALCULATIONS.OUTGOING) QTY_BALANCE
FROM
CALCULATIONS;Edited by: user574699 on Nov 17, 2008 2:10 AM code formattingI suppose (how can i be sure?) that the queries in question are:
NVL((select sum(stm.qty_rec) from stock stm WHERE STM.REC_DATE < MONTHS.DT AND STM.PNM_AUTO_KEY = PNM.PNM_AUTO_KEY GROUP BY pnm_auto_key),0) INCOMINGand
NVL((select sum(saj.qty_adj) from stock_adjust saj
inner join stock stm on saj.stm_auto_key = stm.stm_auto_key
inner join parts_master pnm on stm.pnm_auto_key = pnm.pnm_auto_key where SAJ.CHANGE_DATE < MONTHS.DT AND STM.PNM_AUTO_KEY = PNM.PNM_AUTO_KEY group by pnm_auto_key),0) OUTGOINGBoth queries have an aggregate function based on the grouping on PNM_AUTO_KEY. Both WHERE clauses also include the = PNM_AUTO_KEY statement. So how can these return more than 1 row?
As I stated I cannot run the subqueries without the rest. The database contains over 200000 PNM_AUTO_KEYS, and I don't know which one is causing the problems.... -
SINGLE ROW SUBQUERY....error
Hi Friends,
How do I modify my program to avoid "single row subquery" error.
UPDATE AR.HZ_CONTACT_POINTS B
SET B.PHONE_COUNTRY_CODE =
(SELECT D.PHONE_COUNTRY_CODE
FROM CAX.CAX_CUSTOMERS_ALL A,
AR.HZ_CONTACT_POINTS X,
AR.HZ_PARTY_SITES C,
AR.HZ_PHONE_COUNTRY_CODES D,
CAX.HZ_LOCATIONS_V E
WHERE ( A.ORG_ID=111
AND X.OWNER_TABLE_NAME='HZ_PARTY_SITES'
AND X.PHONE_NUMBER IS NOT NULL)
AND ( (C.LOCATION_ID=E.LOCATION_ID)
AND (X.OWNER_TABLE_ID=C.PARTY_ID)
AND (E.COUNTRY=D.TERRITORY_CODE)
AND (X.OWNER_TABLE_ID=A.CUSTOMER_ID)
AND (B.PHONE_NUMBER=X.PHONE_NUMBER)
WHERE B.OWNER_TABLE_NAME='HZ_PARTY_SITES'
AND B.PHONE_NUMBER IS NOT NULL;Thanks in advanceHi friends,
This is the sample data :
hz_contact_points
CONTACT_POINT_ID CONTACT_POINT_TYPE STATUS OWNER_TABLE_NAME OWNER_TABLE_ID PRIMARY_FLAG ORIG_SYSTEM_REFERENCE PHONE_NUMBER PHONE_LINE_TYPE CONTENT_SOURCE_TYPE RAW_PHONE_NUMBER CREATED_BY_MODULE APPLICATION_ID TRANSPOSED_PHONE_NUMBER
33,476 PHONE A HZ_PARTY_SITES 22,796 N 33476 3414510 FAX USER_ENTERED 3414510 TCA_BASE_UPGRADE_SCRIPT 222 0154143
33,475 PHONE A HZ_PARTY_SITES 22,796 Y 33475 2691028 GEN USER_ENTERED 2691028 TCA_BASE_UPGRADE_SCRIPT 222 8201962
hz_party_sites
PARTY_SITE_ID PARTY_ID LOCATION_ID PARTY_SITE_NUMBER STATUS CREATED_BY_MODULE APPLICATION_ID ACTUAL_CONTENT_SOURCE
23,182 22,796 3,975 23182 A TCA_BASE_UPGRADE_SCRIPT 222 USER_ENTERED
23,181 22,796 3,956 23181 A TCA_BASE_UPGRADE_SCRIPT 222 USER_ENTERED
hz_locations
LOCATION_ID LAST_UPDATE_DATE LAST_UPDATED_BY CREATION_DATE CREATED_BY ORIG_SYSTEM_REFERENCE COUNTRY ADDRESS1 CITY POSTAL_CODE STATE CREATED_BY_MODULE APPLICATION_ID ACTUAL_CONTENT_SOURCE GEOMETRY
3,956 15/Nov/07 07:16:12 PM 5,845 28/Jul/03 04:54:20 PM 3,282 23181 PA ZONA LIBRE DE COLON ,COLON.R.DE PANAMA. PANAMA NULL PANAMA TCA_BASE_UPGRADE_SCRIPT 222 USER_ENTERED (, , , , )
3,975 28/Jul/03 04:56:57 PM 3,282 28/Jul/03 04:56:57 PM 3,282 23182 US MURANO TRADING C/O QUARTZ ELECTRONICS 2555 NW 107 AVENUE . MIAMI 33172 FLORIDA TCA_BASE_UPGRADE_SCRIPT 222 USER_ENTERED (, , , , )***please ommit the comma for ID columns , as excel automatically inserts them for numeric
The problem lies with the specific connection between the tables
"hz_contact_points" and "hz_party_sites" which is linked by party_id which is also multiple record :(
Thanks again -
TWO ERRO ORA-01427: single-row subquery returns more than one row
Hi,
I have a procedure which contains a cursor. If i run the select statement in the cursor separetly, it returns only value and works fine. But the same select statement in the cursor of a procedure throws me the error as below:
TWO ERRO ORA-01427: single-row subquery returns more than one row
Not sure what going on...any help appreciated.
Below is the select statement:
SELECT DISTINCT PSE.PARENT_POSITION_ID,
(SELECT DISTINCT PPD1.SEGMENT2
FROM PER_POSITION_DEFINITIONS PPD1,
HR_ALL_POSITIONS_F HAPF2,
PER_POS_STRUCTURE_ELEMENTS PSE2
WHERE TRUNC(SYSDATE) BETWEEN
HAPF2.EFFECTIVE_START_DATE AND
HAPF2.EFFECTIVE_END_DATE
AND PPD1.POSITION_DEFINITION_ID =
HAPF2.POSITION_DEFINITION_ID
AND
HAPF2.POSITION_ID = PSE2.PARENT_POSITION_ID
AND PSE2.PARENT_POSITION_ID =
PSE.PARENT_POSITION_ID
AND ROWNUM = 1) SEGMENT2,
(SELECT DISTINCT PAPF1.FIRST_NAME || ' ' ||
PAPF1.LAST_NAME CHIEF_NAME
FROM PER_ALL_PEOPLE_F PAPF1,
PER_ALL_ASSIGNMENTS_F PAAF1
WHERE TRUNC(SYSDATE) BETWEEN
PAPF1.EFFECTIVE_START_DATE AND
PAPF1.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) BETWEEN
PAAF1.EFFECTIVE_START_DATE AND
PAAF1.EFFECTIVE_END_DATE
AND PAAF1.POSITION_ID = PSE.PARENT_POSITION_ID
AND PAPF1.PERSON_ID = PAAF1.PERSON_ID
AND ROWNUM = 1) CHIEF_NAME
FROM PER_POS_STRUCTURE_ELEMENTS PSE,
HR_ALL_POSITIONS_F HAPF,
PER_POSITION_DEFINITIONS PPD
WHERE PSE.SUBORDINATE_POSITION_ID = 52744
AND TRUNC(SYSDATE) BETWEEN HAPF.EFFECTIVE_START_DATE AND
HAPF.EFFECTIVE_END_DATE
AND HAPF.POSITION_ID = PSE.SUBORDINATE_POSITION_ID
AND HAPF.POSITION_DEFINITION_ID = PPD.POSITION_DEFINITION_ID;
Thanks
PK
Edited by: user539616 on Jun 30, 2009 6:30 PMHi,
The cursor has a different parameter? Maybe the query is not exactly the same. Could you check this?
This is your query (formatted):
SELECT DISTINCT PSE.PARENT_POSITION_ID,
(SELECT DISTINCT PPD1.SEGMENT2
FROM PER_POSITION_DEFINITIONS PPD1,
HR_ALL_POSITIONS_F HAPF2,
PER_POS_STRUCTURE_ELEMENTS PSE2
WHERE TRUNC(SYSDATE) BETWEEN HAPF2.EFFECTIVE_START_DATE AND
HAPF2.EFFECTIVE_END_DATE
AND PPD1.POSITION_DEFINITION_ID = HAPF2.POSITION_DEFINITION_ID
AND HAPF2.POSITION_ID = PSE2.PARENT_POSITION_ID
AND PSE2.PARENT_POSITION_ID = PSE.PARENT_POSITION_ID
AND ROWNUM = 1) SEGMENT2,
(SELECT DISTINCT PAPF1.FIRST_NAME || ' ' || PAPF1.LAST_NAME CHIEF_NAME
FROM PER_ALL_PEOPLE_F PAPF1,
PER_ALL_ASSIGNMENTS_F PAAF1
WHERE TRUNC(SYSDATE) BETWEEN PAPF1.EFFECTIVE_START_DATE AND
PAPF1.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) BETWEEN PAAF1.EFFECTIVE_START_DATE AND
PAAF1.EFFECTIVE_END_DATE
AND PAAF1.POSITION_ID = PSE.PARENT_POSITION_ID
AND PAPF1.PERSON_ID = PAAF1.PERSON_ID
AND ROWNUM = 1) CHIEF_NAME
FROM PER_POS_STRUCTURE_ELEMENTS PSE,
HR_ALL_POSITIONS_F HAPF,
PER_POSITION_DEFINITIONS PPD
WHERE PSE.SUBORDINATE_POSITION_ID = 52744
AND TRUNC(SYSDATE) BETWEEN HAPF.EFFECTIVE_START_DATE AND HAPF.EFFECTIVE_END_DATE
AND HAPF.POSITION_ID = PSE.SUBORDINATE_POSITION_ID
AND HAPF.POSITION_DEFINITION_ID = PPD.POSITION_DEFINITION_ID;Tips: To put formatted code you must use {noformat}{noformat} tags, start tag and end tag are the same,you don't need to put '/' in the close tag.
Regards, -
ORA-01427 single-row subquery returns more than requested number of rows
Hi All,
SR#3-5155460391
When opening the Expense report form the given error occurs.
This is happening with only one employee.
The condition could not be evaluated because of error ORA-01427
single-row subquery returns more than requested number of rows.
query is:
select pea.segment5
from
per_all_assignments_f paf,
pay_personal_payment_methods_f ppm,
pay_external_accounts pea,
fnd_application fap,
fnd_id_flex_structures ffs
where
paf.person_id=:employee_id
and paf.primary_flag='Y'
and paf.assignment_type='E'
and trunc(sysdate) between paf.effective_start_date and paf.effective_end_date
and ppm.assignment_id=paf.assignment_id
and trunc(sysdate) between ppm.effective_start_date and ppm.effective_end_date
and ppm.attribute2='Y'
and pea.external_account_id=ppm.external_account_id
and pea.id_flex_num=ffs.id_flex_num
and fap.application_short_name='PAY'
and ffs.application_id=fap.application_id
and ffs.id_flex_code='BANK'
and ffs.id_flex_structure_code='GB_BANK_DETAILS';
Thanks,
Shikha
Edited by: user10456902 on Feb 3, 2012 1:57 AMHi,
First try to find pea.external_account_id from per_all_people_f,per_all_assignments_f,fnd_application.fnd_id_flex_structures etc
and then find
SELECt pea.segment5
FROM pay_external_accounts pea
WHERE pea.external_account_id = : external_account_id -- derived from SQL1
and check how many rows are returned -
Discoverer 11g Workbook Fails With Single row subquery returns more than 1
All -
We are using discoverer-11g workbook using EBS 12.1.3 integration
We are seeing below error message only for few users on all workbooks in discoverer.
ORA-01427 Single row subquery returns more than one row
EBS Version : 12.1.3
Discoverer Version : 11.1.1.6
Database Version : 11.2.0.3
Please advise on this
Regards
VSHHi,
If it is happening for only a few users then the problem may be caused by security conditions built into the query. However, you need to give us some information about the SQL the workbooks are running. Do you get this error even for the very simple queries?
Rod West -
ORA-01427: single-row subquery returns more than one row
I have a problem something like this:
table A
id col1 after_update
1 ? 11
2 ? 22
3 ? 33
3 ? 44
3 ? 55
4 ? 66
5 ? 88
5 ? ? /* won't be updated */
6 ? 99
7 ? null /* updated to null */
9 ? 20
table B
id col2
1 11
2 22
3 33
3 44
3 55
4 66
4 77
5 88
6 99
8 10
9 20
When I try the query:
update table A
set col1 = (select distinct col2 from table B) it gives me the error ORA-01427: single-row subquery returns more than one row
When I try the query:
update (select x.col1 x_col1,y.col2 y_col2
from (select id,col1,row_number() over (partition by id order by null /*col1*/) rn
from table_a
) x,
(select id,col2,row_number() over (partition by id order by col2) rn
from table_b
) y
where x.id = y.id
and x.rn = y.rn
set x_col1 = y_col2
it gives me an error saying ora-01779 :cannot modify a column which maps to a non key- preserved table. It shows the same even when I add the key to the tables.
My Database version is Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Kindly help.Another way, not waterproof too relay on rowid, but in your case it could work.
You have to verify it by yourself
update test_a aa
set col1 =
(select b.col1 from
(select
id, col1
,row_number() over
(partition by id order by col1) rn
from table_b) b,
( select
rowid, id, col1
,row_number() over (partition by id order by col1) sort_order
from test_a
) a
where
a.id=b.id
and
sort_order = rn
and
aa.rowid=a.rowid
)Edited by: chris227 on 03.04.2013 06:42
Table name corrected -
ORA-01427: single-row subquery returns more than one row HELP
I need to update baemployee.Stock_nbr field with select substr(C.CHECK_DIGIT, 3, 10)
from EMP_CHECK_DIG c where C.EMPLOYEE = e.EMPLOYEE
Please help.
update baemployee e
set Stock_nbr = (select substr(C.CHECK_DIGIT, 3, 10)
from EMP_CHECK_DIG c where C.EMPLOYEE = e.EMPLOYEE)
where exists
(select C.CHECK_DIGIT
from EMP_CHECK_DIG c where C.EMPLOYEE = e.EMPLOYEE)
and exists (select 1 from EMPLOYEE ee where ee.employee = e.employee and ee.emp_status like 'A%');
ORA-01427: single-row subquery returns more than one rowHi,
Welcome to the forum!
Whenever you have a question, please post some sample data, so that people can re-create the problem and test their solutions.
CREATE TABLE and INSERT statements, like the ones below, are great:
CREATE TABLE baemployee
( employee NUMBER (4)
, stock_nbr VARCHAR2 (10)
INSERT INTO baemployee (employee, stock_nbr) VALUES (1234, 'FUBAR');
CREATE TABLE employee
( employee NUMBER (4)
, emp_status VARCHAR2 (10)
INSERT INTO employee (employee, emp_status) VALUES (1234, 'ACTIVE');CREATE TABLE AS is good, too:
CREATE TABLE emp_check_dig
AS SELECT 1234 AS employee, 'AA1234567890ZZZ' AS check_digit FROM dual
UNION ALL SELECT 1234, 'AA2121212121ZZZ' FROM dual
;Also post the results you want from that data. In this case, the results would be the contents of the baemployee table after you run the UPDATE.
Would you want:
employee stock_nbr
1234 1234567890or would you want
employee stock_nbr
1234 2121212121If you run the UPDATE statement you posted with the data above, you'll get the "ORA-01427: single-row subquery returns more than one row" error, and you can see what causes it: there is more than one row from emp_check_dig that could be used to UPDATE the same row of baemployee. Say what you want to do in this situation (and why), and someone will help you find a way to do it. -
ORA-01427: single-row subquery returns more than one row -- no solution
Hello to all:
I have to tables:
Table a anwender (Email,Dept). --> all fields are filled
Table b dingo (Name,email,dept) --> all fields are filled
I now want to update the table a with the data from table b:
update anwender a set a.abteilung = ( select distinct b.abteilung from dingo b where b.email = a.email);
Then I got the error: ORA-01427: single-row subquery returns more than one row
Every dept is about 100x in the database, so it is clear that i got more than one row back. But how can I update the table now?Okay, I got several duplicates, and I deletet a lot of data in my database.
Now I want to remove all entries with more than one departments per mail adresses.
a
select email,count(abteilung) from dingo group by email having count(abteilung)>1 order by count(abteilung)
shows me all the fake mailadresses.
But a
delete from dingo where email in (select email,count(abteilung) from dingo group by email having count(abteilung)>1 order by count(abteilung) );
gives me a
SQL Error: ORA-00907: missing right parenthesis
I´m very confused now ...
Oops, now I got the solution:
delete from dingo where email in (select email from (select email,count(abteilung) from dingo group by email having count(abteilung)>1 )) ;
Edited by: user8309218 on Dec 18, 2009 6:24 AM -
Update gives "single-row subquery returns more than one row"
Hi,
I have to update a table by getting values from two other tables. While doing that the inner query returns more than one value. I am not sure how to implement the logic without returning more than one row in sub quesry. Need help on that.
My query:
update buf_office_str o
set o.manager_ident =
(select sp.ident
from se2_r_src_sourceperson sp ,
(select distinct director_name, team_name from buf_sales_dump )t
where SP.SRCNAME = upper(substr(t.director_name,instr(t.director_name,' ')+1,length(t.director_name))||', '||substr(t.director_name,1,instr(t.director_name,' ')-1 ) )
and o.office_descr = t.team_name
Basically the query gets teh manager id from sp table where sp.srcname = t.team-name.
The office descr should be equal to the team_name.
This is the logic I am working towards:
For each office, i get the office_descr and get corresponding team_name. Match the team's director_name (from table t) with the sp.name and return the employee's id (sp.ident) for that office_descr.
I need to update all 50 offices with corresponding managerid for that office in buf_office_str table.
Is it possible to get done in one update? Pls let me know.Hi,
"Single-row subquery returns more than one row" is one of those error messages that actually means what it says: the correlated sub-query in your SET clause is sometimes returning 2 or more rows .
The solution could be as simple as making the sub-query SELECT DISTINCT , as its in-line view, t, already is.
It's possible you have bad data, or a mistake in your statement.
To find the problem cases, you can run something like this:
WITH sub_q AS
SELECT -- DISTINCT ?
sp.ident
, t.team_name
, COUNT (*) OVER (PARTITION BY t.team_name) AS cnt
FROM se2_r_src_sourceperson sp
, ( SELECT DISTINCT director_name
, team_name
FROM buf_sales_dump
) t
WHERE sp.srcname = UPPER ( SUBSTR ( t.director_name
, INSTR ( t.director_name
) + 1
, LENGTH (t.director_name)
|| ', '
|| SUBSTR ( t.director_name
, 1
, INSTR ( t.director_name
) - 1
SELECT o.* -- or whatever helps you
, sq.*
FROM buf_office_str o
JOIN sub_q sq ON o.office_descr = sq.team_name
WHERE sq.cnt > 1
;If you'd like more help, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all the tables as they exist before the UPDATE, and the results you want from that data (that is, the contents of buf_office_str after the UPDATE). Make sure the problem occurs with the sample data you post. -
Still problem with single-row subquery returns more than one row
//i did join each table but query runs forever and fail. looks Cartesian join so comes up the following SQL
the following query has a problem. would you please help me, please
Select pe.expense_id
,PE.CODE
,PE.PROJECT_ID
,PE.LDATE
,PE.INAMOUNT pe_amount
,(SELECT TRX.INV_AMOUNT FROM TRXEXPENSES TRX
WHERE PE.EXPENSE_ID=TRX.EXPENSE_ID) AS invamount
,(SELECT RE.AMOUNT FROM REEXPENSES RE WHERE
PE.EXPENSE_ID=RE.EXPENSE_ID) AS recogamount
,(SELECT MLE.M_AMOUNT FROM MATEXPENSES MLE
WHERE PE.EXPENSE_ID=MLE.EXPENSE_ID) AS matamount
from EXPENSES PE
where pe.expense_id=5600
group by expense_id,CODE,PROJECT_ID,LDATE,inamount
//get error message
ora-01427:single-row subquery returns more than one row
//check database
select expense_id,count(*) from TRXEXPENSES
where expense_id in(select expense_id from
expenses)
group by expense_id
having count(*)>1
//here is duplicate record a lot
EXPENSE_ID COUNT(*)
4176 2
5600 3
9572 2
9573 2
9574 2Yes, Expense_id has so many returning rows for trx.inv_amount from trxexpenses in subquery.
I want to show Expense_id with retruning rows using the above query.
ex)The result of the query is like that;
Expense_ Id project_id Ldate InvAmount RecogAmount MatAmount
5600 123 3/2/02 $100(InvAmount)
5600 432 3/12/02 $200(recogAmount)
5600 432 4/12/02 $250(MatAmount)
Thank you so much
Message was edited by:
user524064
Message was edited by:
user524064 -
Single-row subquery returns more than one row - help with update
Hello,
I know this a probably a well documented question but when I checked the search I couldn't find anything relevant to my needs.
I am getting the single-row error when I run this query, i have tried a where exists clause and where column_name in to no avail. Can anyone put me right with this?
My code is:
UPDATE test_sales
SET total =
(SELECT
p.list_price * t.quantity
FROM
test_sales t,
price p
WHERE
t.product_code IN p.product_id
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) >= TO_DATE(TO_CHAR(p.start_date,'DD-MON-RR'))
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) <= TO_DATE(TO_CHAR(p.end_date,'DD-MON-RR'))
AND
t.ship_date IS NOT NULL)the query runs fine on its own and returne 4638 rows which is the number I need to update but it wont work as part of and update. I have also tried this:
UPDATE test_sales
SET total =
(SELECT
p.list_price * t.quantity
FROM
test_sales t,
price p
WHERE
t.product_code IN p.product_id
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) >= TO_DATE(TO_CHAR(p.start_date,'DD-MON-RR'))
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) <= TO_DATE(TO_CHAR(p.end_date,'DD-MON-RR'))
AND
t.ship_date IS NOT NULL)
WHERE product_code IN
(SELECT
product_code
FROM
test_sales t,
price p
WHERE
t.product_code = p.product_id
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) >= TO_DATE(TO_CHAR(p.start_date,'DD-MON-RR'))
AND
TO_DATE(TO_CHAR(t.order_date,'DD-MON-RR')) <= TO_DATE(TO_CHAR(p.end_date,'DD-MON-RR'))
AND
t.ship_date IS NOT NULL)but that wont work either. by uising WHERE and AND clauses that select a match first on product code and then place the order_date in between the start and finish times of a distinct pricing period for each item I figured this would work but it won't. Any ideas what to try?
Mikeor:
SQL> create table test_sales
2 as
3 select 2 quantity, 1 product_code, trunc(sysdate) order_date, trunc(sysdate) ship_date, 0 total from dual
4 /
Tabel is aangemaakt.
SQL> create table price
2 as
3 select 10 list_price, 1 product_id, trunc(sysdate) start_date, trunc(sysdate) end_date from dual
4 /
Tabel is aangemaakt.
SQL> alter table price add constraint price_pk primary key (product_id)
2 /
Tabel is gewijzigd.
SQL> update ( select p.list_price * t.quantity a
2 , t.total
3 from test_sales t
4 , price p
5 where t.product_code = p.product_id
6 and t.order_date between p.start_date and p.end_date
7 and t.ship_date is not null
8 )
9 set total = a
10 /
1 rij is bijgewerkt.Regards,
Rob.
Maybe you are looking for
-
I am trying to compensate two open line items (which refere to the same document) and for which we did a payment in advance. In F-53 we set the indicator for Special Ledger(we work with special ledger to payment in advance) but witholding tax calcula
-
short description of the setup: 2 hosts running report services say reportsvc_1, reportsvc_2 in the sanme subnet. reports are called using run_report_object from within oracle forms. Is there any mechanism that these two hosts can share the load, loa
-
I have an ipod touch with norwegian language
Hi Nnow I am living in Spain (I baught it here) and it always get the appstore and itunestore on spanish. I do not understand so much spanis yet so can it change it to english or norwegian? Thanks in adwance.
-
Getting the Latest Transaction
Hi guyz, Just want to ask how will I do this...Is this possible in routine or in the query? For example, I have these fields: 0CALDAY (date of the transaction) 0CALMONTH 0CUSTOMER ZTRANS (transaction number) ZVOL (volume) I want to get the latest tra
-
I have a 15in Retina Macbook Pro, which is a part of an active directory. I'm not able to open finder, instead getting a window saying "The application 'Finder' can't be opened. -600". I've tried using both administrator and non-administrator account