Method Validator based on two columns
Hi,
I have a table called FndCities with attributes city_id (pk), country_id (fk) and city_name.
I want to check if a city name is unique for a certain country. For example England can have a city name called "London", but USA might have a city called "London". However neither England not USA can have two "London" cities.
I have implemented a custom method validator and here is the logic:
In the FndCitiesImpl.java i created the following method:
public boolean validateCityName(String data) {
FndCitiesDefImpl entityDef = (FndCitiesDefImpl)getDefinitionObject();
String originalValue = (String)getPostedAttribute(CITYNAME);
Number originalValuePk = (Number)getPostedAttribute(COUNTRYPKFK);
if (data != null && !data.equalsIgnoreCase(originalValue)) {
return !(entityDef.existsByCityName(getDBTransaction(),data, originalValuePk));
return true;
and in the FndCitiesDefImpl.java i have implemented the method existsByCityName(DBTransaction, city_name, country_id).
In the creation method my custom validation works fine, however when i edit a record, becuase the if statement watches for changes in the city name, when changing the Country the validation is not performed. I cannot the country id in the validateCityName method because validation is performed on one column.
How can i achieve this?
Thanks
Antonis
Hi Antonis,
Not sure what you mean again by "JDeveloper does not handle the constraints properly." I have exactly this situation in my application (JDev 10.1.3.1), and I am using a database constraint to enforce uniqueness across 2 columns. I've customized the error messages (see Re: Unique key existence check and ER: ADF BC - allow custom error msgs for common exceptions (e.g. DML) ). Works just dandy.
John
Similar Messages
-
Update column based on two columns
Hi,
MinValue MaxValue Desc
-1 -1
-1 1
-1 2
0 0
0 1
0 2
The above is my table which is having three columns MinValue, MaxValue, Desc. First two columns have data and I need to update the 3rd column 'Desc' based on two columns data.
I need to update like,
when MinValue=-1 and MaxValue=-1 then 'NotSpecified'
when MinValue=-1 and MaxValue=1 then 'Up to 1'
when MinValue=-1 and MaxValue=2 then 'Upto 2'
when MinValue=0 and MaxValue=1 then 'At lest 1'
when MinValue=0 and MaxValue=2 then 'At least 2'
when MinValue=0 and MaxValue=3 then 'At least 3'
The data in 'MaxValue' is like 1,2,3,4,5...50. So for each description it should append this value as mentioned above(till 'Up to 50', 'At least 50'). How can I do this with case statement?
Thanks,
Gangadhardeclare @T table ( MinValue int,MaxValue int, [Desc] nvarchar(100) );
insert @T ( MinValue, MaxValue )
values ( -1, 1 ) , ( -1, 1 ) , ( -1, 2), ( 0, 0), ( 0, 1), ( 0, 2)
select *
from @T
update @T
set [Desc] = case
when MinValue=-1 and MaxValue=-1 then 'NotSpecified'
when MinValue=-1 and MaxValue=1 then 'Up to 1'
when MinValue=-1 and MaxValue=2 then 'Upto 2'
when MinValue=0 and MaxValue=1 then 'At lest 1'
when MinValue=0 and MaxValue=2 then 'At least 2'
when MinValue=0 and MaxValue=3 then 'At least 3'
end
select *
from @T
T-SQL Articles
T-SQL e-book by TechNet Wiki Community
T-SQL blog -
Sorting based on two columns in report
Hi,
we have one issue on sorting based on two columns in report.
In the report we are doing sorting on two columns(week_id and stage_name). I have attached the screen shot for the same. The sorting is first done on the week_id and then on the stage_name. The issue comes when we have no data for the stage 1 - Prospect in W1. The stage goes to the second position.
Please suggest if there is any work around to show the 1 - Prospect stage in W1.
Regards,
Ambika Nanda.what is w1? where is screenshot? and is stage seoncd sort? if so what is the issue?
-
BC4J Objects with PKs based on two columns using multiple sequences
I have implemented a BC4J object that is based on a DB table that has two columns as the primary key. For example Table A's primary key is Group and ID and there is a DB sequence for each Group.
I use the BC4J object using servlets and JSPs and I have been able to implement an Update form.
I now want to implement a Create (New) form. I've read forum postings and info on the help regarding using the SequenceImpl class to override the EntityImpl object's create method as shown below:
protected void create(AttributeList attributeList)
super.create(attributeList);
SequenceImpl mySeq = new SequenceImpl("MY_SEQ",getDBTransaction());
setMyObjectId(mySeq.getSequenceNumber());
But as you can see I need to know the value of the group attribute before I can get the next value sequence:
For new EO belonging in Group1 I need sequence from "GROUP1_SEQ", Group 2 from "GROUP2_SEQ", etc.
I would like to put this code in the Entity Object where it belongs. I guess my problem is simply how to create a new row in the View Object with a passed parameter which is the value of Group.
Thanks in advance!Angelo:
How is the EO suppose to receive the group id? Is it from the view row? If so, the VO can pass that group id to the EO through the attribute list and calling the
public Row createAndInitRow(AttributeList nvp);
API.
Example code would be:
ViewObject myVO;
// myVO is initialized
AttributeList nvp = new oracle.jbo.NameValuePairs();
// GroupID is the attr name of the Group ID
nvp.setAttribute("GroupID", <some-value>);
Row row = myVO.createAndInitRow(nvp);
If you do that the create(AttributeList attributeList) method of the EO will receive the GroupID value coming from the VO.
Then, you can use that for your sequence.
Thanks.
Sung -
Parent-Child hierarchy based on two-column key
Hello
Is it possible to create a parent-child hierarchy, if the primary key of the table consists of two columns?
My table looks like:
TRACE_ID | DIAG_ID | SUPER_DIAG_ID
with TRACE_ID and DIAG_ID as PK.
If I define only DIAG_ID as PK, I can add a logical dimension (PC-hierarchy) without problems.
However when I also add TRACE_ID to my PK, I cannot select a member key in the new logical dimension window and therefore not create a logical dimension.
Is this a limitation of OBIEE and I have to merge the two colums (which would be rather bad, as there are FK relations to DIAG_ID) or is there a solution?
Regards
MatthiasDear Gowtham ,
I am very well aware of the level based hierarchy available in BO .
The issue that i have raised is all about the Parent Child Hierarchy which creates the recursive query.
I.e Every Parent has a child and that child can be parent of some other . (See the original example for more illustration) -
Unique row based on two columns and single column
Dear Members,
I have a table which contains duplicate rows, for which a query should be able to fetch the unique row from the table. Here the unique is not based on one column, but it should be on two columns and also check for uniqueness on one column.
create table addr ( firstname varchar2(10), lastname varchar2(10), area varchar2(3));
insert into addr values('bob', 'james', '1');
insert into addr values('bob', 'james', '1');
insert into addr values('harry', 'bert', '1');
insert into addr values('jimmy', 'bert', '1');
insert into addr values('sam', 'mac', '1');
insert into addr values('sam', 'knight', '1');
insert into addr values('tom', 'sand', '1');
insert into addr values('cat', 'mud', '1');
The output of query should contain 3 rows.
bob - james
harry - bert or jimmy - bert [ either one of them, but not both ]
sam - mac or sam - knight [ either one of them, but not both ]
tom - sand
cat - mud
SELECT firstname, lastname as total from addr WHERE area = '1' GROUP by firstname,lastname; This does not take of single column duplication..
Any suggestions..SQL> with t_data
as
select 'bob' as firstname, 'james' as lastname, '1' as area from dual union all
select 'bob', 'james', '1' from dual union all
select 'harry', 'bert', '1' from dual union all
select 'jimmy', 'bert', '1' from dual union all
select 'sam', 'mac', '1' from dual union all
select 'sam', 'knight', '1' from dual union all
select 'tom', 'sand', '1' from dual union all
select 'cat', 'mud', '1' from dual
SELECT
firstname,
lastname,
area
FROM
SELECT
t.*,
row_number() over(partition BY firstname order by 1) rn,
row_number() over(partition BY lastname order by 1) rn1
FROM
t_data t
WHERE
rn = 1
AND rn1 =1 ;
FIRSTNAME LASTNAME AREA
bob james 1
cat mud 1
jimmy bert 1
sam knight 1
tom sand 1
SQL> -
Qualified list item based on two columns
- fact table inludes following columns
key1
key2
measure1
In segment designer, update counts:
the query must counts two columns "key1 and key2" that key1 and key2 together must be distinct.Here you go:
SQL> WITH bill AS
2 (
3 SELECT 1000 AS billno, 101 AS advertiserid, 102 AS agencyid, 5000 AS total_value FROM DUAL UNION ALL
4 SELECT 1001, 101, 103, 5000 FROM DUAL UNION ALL
5 SELECT 1002, 101, 102, 1000 FROM DUAL
6 ), account AS
7 (
8 SELECT 101 AS account1_id, 102 AS account2_id, 'John' AS name, 50 AS empid FROM DUAL UNION ALL
9 SELECT 101, 103, 'James', 40 FROM DUAL UNION ALL
10 SELECT 101, 105, 'Joe', 60 FROM DUAL
11 )
12 /* End Sample Data */
13 SELECT a.name
14 , a.empid
15 , a.account1_id
16 , a.account2_id
17 , SUM(b.total_value)
18 FROM account a
19 JOIN bill b ON a.account1_id = b.advertiserid
20 AND a.account2_id = b.agencyid
21 GROUP BY a.name
22 , a.empid
23 , a.account1_id
24 , a.account2_id
25 ;
NAME EMPID ACCOUNT1_ID ACCOUNT2_ID SUM(B.TOTAL_VALUE)
John 50 101 102 6000
James 40 101 103 5000 -
Compare two tables based on two columns
Hi,
my tables looks like this:
Desc Table A (account)
Account1_id
Account2_id
name,
empid
Table B (Bill )
BillNo
Advertiserid
agencyid
total vvalue
I need to pick up total value from table B where the unique combination of advertiser-Agency id is the same as the given account1_id -Account2_id combination in table A for each employee id.
In other words my output should be like
Empid | Account_id (should be same as advertiserid)| Account2_id (same as agencyid) | sum(total_value) for this adv-agency combination.....
objective: Get the total value from table B for each unique account1-account2 combination (advertiser-agency in other words) .
I am not sure if I should use a coreelated subquery or how to handle the situation....Right now I am just checking the two columns separately like this:
select.......from a,b
where b.advertiser_id = a.account1_id and b.agencyid = b.account2id
Is it correct to do so? I have a feeling that I am missing something if I join them seperately like this......Any advice on this?
I am using Oracle 10g. Hope I am clear.Please let me know. Thankx in advance.Here you go:
SQL> WITH bill AS
2 (
3 SELECT 1000 AS billno, 101 AS advertiserid, 102 AS agencyid, 5000 AS total_value FROM DUAL UNION ALL
4 SELECT 1001, 101, 103, 5000 FROM DUAL UNION ALL
5 SELECT 1002, 101, 102, 1000 FROM DUAL
6 ), account AS
7 (
8 SELECT 101 AS account1_id, 102 AS account2_id, 'John' AS name, 50 AS empid FROM DUAL UNION ALL
9 SELECT 101, 103, 'James', 40 FROM DUAL UNION ALL
10 SELECT 101, 105, 'Joe', 60 FROM DUAL
11 )
12 /* End Sample Data */
13 SELECT a.name
14 , a.empid
15 , a.account1_id
16 , a.account2_id
17 , SUM(b.total_value)
18 FROM account a
19 JOIN bill b ON a.account1_id = b.advertiserid
20 AND a.account2_id = b.agencyid
21 GROUP BY a.name
22 , a.empid
23 , a.account1_id
24 , a.account2_id
25 ;
NAME EMPID ACCOUNT1_ID ACCOUNT2_ID SUM(B.TOTAL_VALUE)
John 50 101 102 6000
James 40 101 103 5000 -
Update multiple rows based on two columns in same row
I have a 1000 rows in a table I would like to update with a unique value. This unique value is a cocatenation of two columns in teh same row.
Each row has a (i) date and a (ii) time and a (iii) date_time column. I would like to update the date_time (iii) column with a cocatenation of the (i) date and (ii) time columns.
I know how I would update a single row but how can I update multiple rows with a cocatenation of each of the two columns - i.e put a different value into the date_time column for each row?this?
update table tab_name
set date_time =date||time
where your_condition -
Validating the first two columns of a excel file when importing?
Hi everyone,
I have an excel file in the presentation server which has to be uploaded into prog.First the user adds a additonal column in the excel file.
For example the excel file is intially in this way,
col1 col2 col3 col4 col5
Now the user adds one more column 'colx' in the excel sheet and he will upload it into the prog.Before uploading programatically we have to validate that the first two columns of the excel file should be col1 colx(the newly added one).How can I do it?
Any suggestions please?
Thank you.Hi gopi,
Thanks for the reply.
I have one more problem.Now in the excel file I may have only 5 columns in the future it may have more than that.So the internal table which will hold the uploaded values from excel file should be dynamic.I can't declare the internal table with 5 or 6 columns like that.If the user adds some columns in the excel file and upload it,the internal table should hold these columns also.
i hope u understood my requirement.Can u give me any ideas.If u have any sample code for this kind of requirement.
Thank you. -
How to split rows based on two columns..
Hi all...
I have a requirement.
I have product column, sell, purchace prices..(total of three columns) in a data set.
my data set is such a way that..if sale price exists...there is no purchase price and vice versa..
I need too present in a report ,two tables:
table 1 consists of only Sale price items
table 2 should contain only Pruchase Items.
Please see the below picture for clear understanding..
Is that doable? Where do we need to impose a condition?I tried to impose a condition but,it didnt seem to work
http://i51.tinypic.com/29xfdc6.jpg
Please help.Can you send me the template and xml file to [email protected]? I can try to help.
Did you try to filter out the records by the sale price or purchase price column not equal to null?
Thanks,
Bipuser -
Percentage calculation in t-sql based on two columns
Hi All
I have a source table with 4 columns and data like this..
ID Cnt Col1 Col2
1 22 17 5
2 20 15 5
3 12 5 7
4 10 null 10
5 25 25 null
My output should look like this..
ID Cnt Col1 Col2 Col1% Col22%
1 22 17 5 77.27 22.73
2 20 15 5 75.00 25.00
3 12 5 7 41.66 58.34
4 10 10 0 100
5 25 25 100 0
Create Statement:
CREATE TABLE [dbo].[Sample] (
[ID] Int NOT NULL,
[Cnt] Int NULL,
[Col1] Int NULL,
[Col2] Int NULL,
CONSTRAINT [Sample] PRIMARY KEY CLUSTERED
[ID] ASC
Insert Statement:
insert into Sample(ID, cnt,Col1, col2) values (1 , 22 , 17 , 5 )
insert into Sample(ID, cnt,Col1, col2) values (2 , 20 , 15 , 5 )
insert into Sample(ID, cnt,Col1, col2) values (3 , 12 , 5 , 7 )
insert into Sample(ID, cnt,Col1, col2) values (4 , 10 , null , 10 )
insert into Sample(ID, cnt,Col1, col2) values (5 , 25 , 25 , null)
Right now I am using below SQL but % fields are not coming correct.
Select (COUNT(CASE WHEN (col1-col2)) < 1) THEN -1 END) /COUNT(*) * 100) AS Col1%
,(COUNT(CASE WHEN (col1-col2) >=1) THEN 1 END) /COUNT(*) * 100) AS Col2%
I need SQL to get correct values in col1% and col2%
Thanks,
RH
sqlIs it what you need:
SELECT Id
,cnt
,col1
,col2
,CASE
WHEN Col1 IS NULL
OR Col1 = 0
THEN 0
ELSE CAST((col1 * 100.0) / cnt AS DECIMAL(10, 2))
END AS [Col1%]
,CASE
WHEN Col2 IS NULL
OR Col2 = 0
THEN 0
ELSE CAST((col2 * 100.0) / cnt AS DECIMAL(10, 2))
END AS [Col2%]
FROM Sample
For every expert, there is an equal and opposite expert. - Becker's Law
My blog
My TechNet articles -
Numbering lines based on two columns
Hi Everyone,
I´d like to know if there is a way to achieve the numbering presented on the second table below with only native Oracle functions, like ROW_COUNT() over partition, etc.
I´m using Oracle 10g.
The logic used is:
Starting from 1, increment one every time the ORIGIN is the same as the FIRST ORIGIN of the group of rows (ID).
ID ORIGIN DESTINATION ORDER
1 A B 1
1 B A 2
1 A B 3
1 B C 4
1 C A 5
ID ORIGIN DESTINATION ORDER NUMBERING
1 A B 1 1
1 B A 2 1
1 A B 3 2
1 B C 4 2
1 C A 5 2In order to compare the ORIGIN of each row with the FIRST ORIGIN of the group I used the LAG function to create a column that will have the FIRST ORIGIN of the group value.
However I was not able to number the lines as shown above (column NUMBERING).
Any help will be much appreciated.
Test query:
WITH T AS
SELECT 1 ID, 'A' ORIGIN, 'B' DESTINATION, 1 ORDERING FROM DUAL UNION ALL
SELECT 1 ID, 'B' ORIGIN, 'A' DESTINATION, 2 ORDERING FROM DUAL UNION ALL
SELECT 1 ID, 'A' ORIGIN, 'B' DESTINATION, 3 ORDERING FROM DUAL UNION ALL
SELECT 1 ID, 'B' ORIGIN, 'C' DESTINATION, 4 ORDERING FROM DUAL UNION ALL
SELECT 1 ID, 'C' ORIGIN, 'A' DESTINATION, 5 ORDERING FROM DUAL
SELECT T.ID
, T.ORIGIN
, T.DESTINATION
, T.ORDERING
, LAG (T.ORIGIN, T.ORDERING -1, 0) OVER (PARTITION BY T.ID
ORDER BY T.ID
, T.ORDERING) FIRST_ORIGIN_OF_GROUP
FROM T
ORDER BY T.ID
, T.ORDERINGHi,
Here's one way:
WITH got_first_origin AS
SELECT id, origin, destination, ordering
, FIRST_VALUE (origin) OVER ( PARTITION BY id
ORDER BY ordering
) AS first_origin
FROM t
SELECT id, origin, destination, ordering
, COUNT ( CASE
WHEN origin = first_origin
THEN 1
END
) OVER ( PARTITION BY id
ORDER BY ordering
) AS numbering
FROM got_first_origin
;This assumes that the combination of id and ordering is unique. Within an id, ordering does not have to be consecutive integers, or anything like that.
Analytic functions can't be nested (the argument to the anlytic COUNT function can't call the analytic FIRST_VALUE function); that's why the sub-query is necessary.
You could do something with LAG, like you tried, rather than FIRST_VALUE, but you'd still need a sub-query, for the same reason. -
How to display data based on two columns in Apex calendar?
I have a table for holiday details with 2 date columns...from-date and a to-date. I need to display the name of the person for the date range they have specified. For Ex if i applied for leaves from may 1 to may 4...the calendar should display my name for 4 dates i.e may1,2,3 and 4
I am new user in apex and still trying new things. Please help me achieve this.Swetha
I created an application using Apex. It is a calendar application to show events that are happening. I ran into an issue with it
If there is an event that occurs during an interval like August15 - August22, the event is shown only on August15, which is the first day of the event. I would like to show it in all days from August15-22.
Here are the items coming from the page
event_id number,
employee_id number
date_from date,
date_to date,
due_date date,
act_id number,
act_loc varchar2,
reminder varchar2,
frequency varchar2,
division varchar2,
event_status varchar2
I am looking to write a process / procedure where it can show the same event on all the days it is occurring
Thanks in advance
Latha -
Calculate percrentage based on 2 column and one filter
Hi,
I am looking for a way to compute percentage based one two column and 1 filter but i have a problem when every thing is checked on my filter.
The table as follow is my example:
ID
cat1
cat2
number
total
pct
1
a
aa
5
40
13%
1
a
ab
20
40
50%
1
a
ac
15
40
38%
1
b
ba
12
47
26%
1
b
bb
20
47
43%
1
b
bc
15
47
32%
2
a
aa
9
45
20%
2
a
ab
16
45
36%
2
a
ac
20
45
44%
2
b
ba
10
50
20%
2
b
bb
20
50
40%
2
b
bc
20
50
40%
I create a power table as follow:
Filter: column ID
Axis: cat1 and cat2
values: pct
The problem is when I want to select all my data in my filter, a sum/mean is done for pct but the results are wrong. Did I missed something ? Is there a way to correct the problem ?Hi mi jo,
It appears that you have created your percentage as a Calculated Column and what you actually want is a Calculated Field.
You can create a Calculated Field by clicking on the Power Pivot ribbon and using a DAX formula similar to the following:
Percentage:=DIVIDE(SUM(TableName[number]), SUM(TableName[total]))
I have formatted this Calculated Field as a percentage and used it to create a Pivot Table:
Is this what you were after or have I misunderstood the problem?
Edit: Just took a quick look at the workbook and can see that the pct column is coming in as a fixed value for a row. The above solution should help. A best practice would be to first create a Calculated Field for each of the number and
total columns such as...
Sum of Number:=Sum(TableName[number])
And...
Sum of Total:=Sum(TableName[total])
And then finally update this DAX formula:
Percentage:=DIVIDE(SUM(TableName[number]), SUM(TableName[total]))
To this...
Percentage:=DIVIDE([Sum of Number], [Sum of Total])
Regards,
Michael Amadi
Please use the 'Mark as answer' link to mark a post that answers your question. If you find a reply helpful, please remember to vote it as helpful :)
Website: http://www.nimblelearn.com
Blog: http://www.nimblelearn.com/blog
Twitter: @nimblelearn
Maybe you are looking for
-
Export Audio to Movie - where is that function in Logic 9?
I have noticed that a very useful function in my Logic Pro 8 (version 8.0.2) options/movie/export audio to movie is not found in the Logic 9 version. One of my friends has this version (and an Intel Mac) but I cannot help him working with music and v
-
Hyperlinks appear broken in PDF
What can be done to avoid the hyperlinks appear broken/half (when it follows to the next line) when Indesign files are converted to a PDF ... ?
-
ADF 11g Deployment on other webservers
Hi All can i deploy my ADF 11g R2 application on web server not WebLogic server , something like ibm WebSphere or Apache thanks
-
Error -694 Volume Structure???
Ran tech tool cd and it could not fix volume structure error and showed error -694. Does anyone know what this means? Just archived and reinstalled OSX yesterday to fix a boot up problem, which it did. But now after doing the needed updates - wheneve
-
CS 5 AE comps with Premiere Pro different in CS5.5
I just upgraded to CS5.5 this morning. I'd been working on a Premiere Pro project with imported AE comps for lower third titles. After the upgraded, those comps are no longer transparent -- they cover the underlying video tracks rather than just havi