Return default data if no data is returned by sql query
Hi,
I have a requirement.
I have an inner query that returns no data. However I still want to return default data (say 'abc'). The below sql does not return anything inspite of using nvl . Please advise .
select nvl( x.vencode,'abc') vencode
from
-- below sql returns no data!
SELECT a.vencode vencode,
a.mid mid,
a.title title,
ROW_NUMBER() OVER (PARTITION BY a.vencode ORDER BY a.title) rnk
FROM (
SELECT *
FROM (SELECT vencode FROM vendor where login is not null and vencode = 'BKFI'
and login > (sysdate - 90) )
CROSS JOIN
(SELECT mid, title, ROWNUM num FROM tcommmemos where mid is not null)
) a,
(SELECT * FROM (
SELECT v.vencode, tc.mid, tc.title
FROM
(select * from vendor
where login is not null and vencode = 'BKFI'
and login > (sysdate - 90)) v,
tcommmemosviewed tcv, tcommmemos tc
WHERE v.vencode = tcv.vencode
and tc.mid is not null
--AND tc.post_date > v.hiredate
AND tc.mid = tcv.mid)
) b
where a.vencode = b.vencode(+)
and a.title = b.title(+)
and a.mid = b.mid(+)
and b.mid is null
) x
Use any aggregate function it'll always return a value even if there no data in the table
create table r_dummy_1 (a number);
SQL> select * from r_dummy_1;
no rows selected
SQL> select nvl(max(a),1) from r_dummy_1;
NVL(MAX(A),1)
1
Similar Messages
-
Not right data when row_number used in inner-view sql query...
Hi ,
I use the below sql statement which displays the right data
select CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE , SUM_POSOTITA , row_number() over(partition by code_farmakou order by sum_posotita desc) from
(SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES ,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_CLINIC A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_EX_IATR A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_FOREON_MS A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_GEN_SINT_KLIN A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_GEN_SINT_EX_IATR A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS)The data are:
CODE_FARMAKOU EMP_NAME PACKTYPE PACKSIZE SUM_POSOTITA ROW_NUMBER()OVER(PARTITIONBYCO
0000002419 FACTREL INJECTION VIAL 2 ML 5 1
0000014071 DOPAMINE HYDROCHLORIDE VIAL 5 ML X 25 30 1
0000086289 DETUSSIN EXPECTORANT BOT 120 ML 3 1
1000000760 DEPON BT 20(BLIST2X10) 2 1
1000000760 DEPON BT 20(BLIST2X10) 1 2
1000003279 MOXACEF BT 40(BLIST10X4) 45 1
1000003279 MOXACEF BT 40(BLIST10X4) 1 2
1000003279 MOXACEF BT 40(BLIST10X4) 1 3
1000014127 DEPON VIT. C BT 2TUBX10 6 1
1000014127 DEPON VIT. C BT 2TUBX10 2 2
1000016655 KABIVEN BT 50ÖÕÓ.×1,7ML 21 1
1000016655 KABIVEN BT 50ÖÕÓ.×1,7ML 2 2However , when i use the below statement , in order not to display the row_number (so i use row_number function in inner-view) the data are different--in different order... why is that????
select CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE , SUM_POSOTITA from
select CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE , SUM_POSOTITA , row_number() over(partition by code_farmakou order by sum_posotita desc) from
(SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES ,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_CLINIC A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_EX_IATR A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_AT_SINT_FOREON_MS A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_GEN_SINT_KLIN A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS
UNION ALL
SELECT CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, TO_DATE(DATES_EKTELESIS,'DD/MM/RRRR') DATES,SUM(POSOTITA) SUM_POSOTITA
FROM EKTELESI_GEN_SINT_EX_IATR A, MITROO_FARMAKOU B
WHERE CODE_FARMAKOU = FARMAK_CODE
GROUP BY CODE_FARMAKOU,EMP_NAME,PACKTYPE,PACKSIZE, DATES_EKTELESIS)
)and its data are:
CODE_FARMAKOU EMP_NAME PACKTYPE PACKSIZE SUM_POSOTITA
1000016655 KABIVEN BT 50ΦΥΣ.Χ1,7ML 21
1000016655 KABIVEN BT 50ΦΥΣ.Χ1,7ML 2
1000000760 DEPON BT 20(BLIST2X10) 2
1000014127 DEPON VIT. C BT 2TUBX10 2
1000003279 MOXACEF BT 40(BLIST10X4) 45
0000014071 DOPAMINE HYDROCHLORIDE VIAL 5 ML X 25 30
0000086289 DETUSSIN EXPECTORANT BOT 120 ML 3
1000014127 DEPON VIT. C BT 2TUBX10 6
1000003279 MOXACEF BT 40(BLIST10X4) 1
1000003279 MOXACEF BT 40(BLIST10X4) 1
0000002419 FACTREL INJECTION VIAL 2 ML 5
1000000760 DEPON BT 20(BLIST2X10) 1NOTE :Sorry, I tried to pose some sample data using the "with" statement but i couldn't...the error ORA-32035 : unreferenced query name defined in WITH clause was displayed..
Regards,
SimonThe optimizer has, well, optimized out the row_number because you never refer to its value in the outermost query.
sql>select deptno, cnt, row_number() over (order by cnt desc) rn
2 from (select deptno, count(*) cnt
3 from emp
4 group by deptno);
DEPTNO CNT RN
30 6 1
20 5 2
10 3 3
3 rows selected.
-- here because we include rn in the outermost query,
-- the results are still ordered based on the analytical function result
sql>select deptno, cnt, rn
2 from (select deptno, cnt, row_number() over (order by cnt desc) rn
3 from (select deptno, count(*) cnt
4 from emp
5 group by deptno));
DEPTNO CNT RN
30 6 1
20 5 2
10 3 3
3 rows selected.
-- but if we don't include rn in the outermost query,
-- the optimizer leaves out the window sort and the results are in a different order
sql>select deptno, cnt
2 from (select deptno, cnt, row_number() over (order by cnt desc) rn
3 from (select deptno, count(*) cnt
4 from emp
5 group by deptno));
DEPTNO CNT
10 3
20 5
30 6
3 rows selected.This just reinforces the point that if you want your results in a particular order, you need to provide an ORDER BY clause - don't rely on execution plans to do your sorting for you. -
Export to Excel from Report region (pl/sql returning sql query)
Hello all,
I have encountered an interesting problem. I have an HTMLDB application with a lot of sql reports coded straight inside the report region. In order to better organize my reports, I decided to
1. make all my report regions of type "Pl/Sql function returning SQL query"
2. create a package inside my database schema which houses all reports as pl/sql functions returning VARCHAR2, the string returned being the report query
3. just calling "return package_name.function_name" from inside my report region of type "Pl/sql function returning SQL query".
This technique seemed to work perfectly. The reports were being returned as expected. I was then asked to provide the "Export to Excel" capability to all my reports. This seemed like a piece of cake using HTML DB's "Export to Excel" extension. However, the "export to excel" does not function correctly when my reports are inside a package in the database. HTML DB tries to export but inside the excel spreadsheet, instead of seeing row data, I see:
<pre>failed to parse SQL query:
ORA-00936: missing expression
<!-- select a.username, b.table_name, 'View Row Data' from schema_browser_user_list a, all_tables b where a.user_id = and a.username = b.owner order by b.table_name asc
--!>
</pre>
I am building my query string inside of my package functions by using a combination of literal strings and concatenating them with some parameter values being passed in. It seems that the HTML DB engine which exports the report to excel does not properly understand the concatenation of variables as can be seen by the empty space to the right of the equal sign in the "a.user_id = " clause. Does anybody have any input as to whether this is a known issue or if I am doing something wrong? Thanks a lot for your time.
- Kenny R.James,
Thanks for the quick reply. I think you mis-understood what I'm doing. All I'm doing is creating packaged functions which return VARCHAR2. The VARCHAR2 that they return is the report query. With this technique, I no longer have to type the query into the HTML DB report region. Instead, I make the report region a "Pl/sql function returning sql query" and make the following call: return package_name.function_name(some_application_items passed in as parameters)
This makes for a much more organized html db app. The problem is that the "export to excel" function does not correctly interpret the VARCHAR2 that my packaged functions are returning. Is this a better explanation? Thanks again for your time.
- Kenny R. -
Report data does not reflect the SQL Query?
Hi,
I have a report which does not seem to be processing all records returned from the database. When I run the SQL Query produced by crystal manually against the SQL Server all data is returned correctly in crystal not. Does this mean my links are not set up correctly in the Database Expert? or is there another issue, I use a Crystal Syntax selection formulae which is based on a couple of paramters to filter the database records.
Help is appreciated
K<p>I agree with Rahul on checking the record count on the report vs. the record count from the query. Conditional suppression and Group selection formula will hide records that are actually being returned.</p><p>It sounds like (from your question) that you are using the database linking expert in CR. You can also check the SQL that CR is sending by going to Database -> Show SQL Query... compare this with the query you are using for validation, this will give you some clues as to whether your linking structure has an issue. </p>
-
Different LOV behavior between SQL query data model and data template
I have noticed different behavior when using parameters linked to list of values (LOV) of type menu with the multiple selection option enabled and a SQL query data model vs a data template. Here's the example because that first sentence was probably really confusing.
SQL Query:
select
plmc.MonthCode, plmc.ModalityDim, plmc.ModalityName,plmc.RegionDim
from
DataOut.dbo.PatientLabMonthlyCross plmc
where
plmc.MonthCode = 200202
and plmc.RegionDim = 1209
and 1 =
case
when coalesce(:modalityDim,null) is null
then 1
else
case
when plmc.ModalityDim in (:modalityDim)
then 1
else 0
end
end
Putting BI Publisher into debug mode, defining a data model of type SQL Query, defining a parameter called :modalityDim linked to a LOV that allows multiple selections, and selecting a couple of values from the LOV the output of the prepared statement is:
[081607_122647956][][STATEMENT] Sql Query : select
plmc.MonthCode,
plmc.ModalityDim,
plmc.ModalityName,
plmc.RegionDim
from
DataOut.dbo.PatientLabMonthlyCross plmc
where
plmc.MonthCode = 200202
and plmc.RegionDim = 1209
and 1 =
case
when coalesce(?,?,null) is null
then 1
else
case
when plmc.ModalityDim in (?,?)
then 1
else 0
end
end
[081607_122647956][][STATEMENT] 1:6
[081607_122647956][][STATEMENT] 2:7
[081607_122647956][][STATEMENT] 3:6
[081607_122647956][][STATEMENT] 4:7
[081607_122654713][][EVENT] Data Generation Completed...
[081607_122654713][][EVENT] Total Data Generation Time 7.0 seconds
Note how the bind variable :modalityDim was changed into two parameters in the prepared statement.
When I use this same SQL Query in a data template the output is:
[081607_012113018][][STATEMENT] Sql Query : select
plmc.MonthCode,
plmc.ModalityDim,
plmc.ModalityName,
plmc.RegionDim
from
DataOut.dbo.PatientLabMonthlyCross plmc
where
plmc.MonthCode = 200202
and plmc.RegionDim = 1209
and 1 =
case
when coalesce(?,null) is null
then 1
else
case
when plmc.ModalityDim in (?)
then 1
else 0
end
end
[081607_012113018][][STATEMENT] 1:'6','7'
[081607_012113018][][STATEMENT] 2:'6','7'
[081607_012113574][][EXCEPTION] java.sql.SQLException: Syntax error converting the nvarchar value ''6','7'' to a column of data type int.
Note the exception because it is trying to convert the multiple parameter values.
Am I doing something completely wrong here? I really need to use a data template because I will need to link a couple of queries together from different database vendors.
-markThis is for 10.1.3.4 - because in 11g every SQL query is automatially part of a data model.
In 10g SQL query is for simple unrelated SQL queries.
If you need to use advance features such as:
a) multiple SQL queries that are joined in master-detail relation ships
b) before/after report triggers
Then you will need to use the data template, which is an XML description
of the queries, links, and PL/SQL calls.
hope that helps,
Klaus -
Hi,
I have a search form with 1 field (date picker) - the user chooses a date and a report based on a sql query is shown.
I want the report to be based on only the month and year, and not the particular day.
If there is a date picker (or something similar) for only month and/or year, then I can change my form, but I don't see this option.
So, I'm trying to write my query to ignore the Day portion in the search form and just do a search based on the month and year, but i'm having trouble with this.
This is my query...
select d.dept, count(e.emp_id) "No. of Employees"
from dept d, employees e
where e.date_created = trunc(:P13_DATE, 'MONTH YYYY')
and d.dept_id = e.dept_id
group by dept
order by dept
How do I write the where clause so that the search is done only on month and year?
Or otherwise, how can I change the search form to exclude the day from the date?
Thanks.Hi,
Oh, the invalid number is the result of :P13_DATE being a string value. all item values are actually strings (or varchar2 if you like) when you referencing them with ':Px_ITEM' format. With the pl/sql function there are 2 possible ways to reference item, namely the function: V('Px_ITEM') and NV('Px_ITEM'). Although in SQL varchar2 => number conversion can be dealed with by the SQL engine.
Unfortunally there is no pl/sql method for getting a DATE of an date-picker item (based on its format mask etc.). Patrick Wolf has added this function in his ApExLib framework, function DV. I find this a nice extension. -
Error While execting SQL Query : No Data to Read from Sockt.
Hi,
I am getting the Error "No Data To Read from Sockt" While executing SQL Query from PL/SQL Developer and same error i am getting while i trying on Toad and SQL*Plus also.
SQL> select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production Pls suggest !!
Thanks n Regards
RjTry to connect without tnsnames. So try the basic connection from SQLDeveloper.
If it works, you have to verify your tnsnames.ora
Are you th only person to have this connection problem or all users meet this error?
Does this connection worked before, is it a new connection?
What changes occured since the connection is out of service. -
PL/SQL function body return sql query, no data found problem
Hi all,
we are trying to build a dynamic report based on item selection by user. we are using SQL Query (PL/SQL function body returning SQL query). However when a user change the item and submit the page . The following error appears.
ORA-01403: no data found.
our query is so simple
declare
l_query varchar2(30000) default 'select id from chw';
begin
if(:P11_PARA=1) then
l_query:='select name from chw';
end if;
return l_query;
end;
any quick help please.Hello Mike,
I tried it, the problem still exists.
ORA-01403: no data found
my new code is
declare
l_query varchar2(30000) default 'select id from chw';
begin
if (nvl(TO_NUMBER(:P11_PARA),0) = 1) then
l_query:='select name from chw';
end if;
return (l_query);
end;
note, there is no process in this page.
Edited by: M.Jabr on Oct 14, 2009 6:13 AM -
Error while deploying a web service whose return type is java.util.Date
Hi
I have written a simple web service which takes in a date input (java.util.Date) and returns the same date back to the client.
public interface Ping extends Remote
* A simple method that pings the server to test the webservice.
* It sends a datetime to the server which returns the datetime.
* @param pingDateRequest A datetime sent to the server
* @returns The original datetime
public Date ping(Date pingDateRequest) throws RemoteException;
The generation of the Web service related files goes smoothly in JDeveloper 10g. The problem arises when I try to deploy this web service on the Oracle 10g (10.0.3) OC4J standalone. it gives me the following error on the OC4J console :
E:\Oracle\oc4j1003\j2ee\home\application-deployments\Sachin-TradingEngineWS-WS\
WebServices\com\sachin\tradeengine\ws\Ping_Tie.java:57: ping(java.util.Date) in com.sachin.tradeengine.ws.Ping cannot be applied to (java.util.Calendar) _result = ((com.sachin.tradeengine.ws.Ping) getTarget()).ping
(myPing_Type.getDate_1());
^
1 error
04/03/23 17:17:35 Notification ==> Application Deployer for Sachin-TradingEngineWS-WS FAILED: java.lang.InstantiationException: Error compiling :E:\Oracle\oc4j1003\j2ee\home\applications\Sachin-TradingEngineWS-WS\WebServices: Syntax error in source [ 2004-03-23T17:17:35.937GMT+05:30 ]
I read somewhere that the conversion between java to xml datatype and vice versa fails for java.util.Date, so it is better to use java.util.Calendar. When I change the code to return a java.util.Calendar then the JDeveloper prompts me the following failure:
Method Ping: the following parameter types do not have an XML Schema mapping and/or serializer specified : java.util.Calendar.
This forces me to return a String data.
I would appreciate if someone can help me out.
Thanks
Sachin Mathias
Datamatics Ltd.Hi
I got the web service working with some work around. But I am not sure it this approach would be right and good.
I started altogether afresh. I did the following step :
1. Created an Interface (Ping.java) for use in web Service as follows :
public interface Ping extends Remote{
public java.util.Date ping(java.util.Date pingDateRequest)
throws RemoteException;
2. Implemented the above interface in PingImpl.java as follows :
public class PingImpl implements Ping
public java.util.Date ping(java.util.Date pingDateRequest) throws RemoteException {
System.out.println("PingImpl: ping() return datetime = " + pingDateRequest.toString());
return pingDateRequest;
3. Compiled the above 2 java files.
4. Generated a Stateless Java Web Service with the help of JDeveloper. This time the generation was sucessful.(If I had "java.util.Calendar" in place of "java.util.Date" in the java code of the above mentioned files the web service generation would prompt me for error)
5. After the generation of Web Service, I made modification to the Ping interface and its implementing class. In both the files I replaced "java.util.Date" with "java.util.Calendar". The modified java will look as follows :
Ping.Java
=========
public interface Ping extends Remote{
public java.util.Calendar ping(java.util.Calendar pingDateRequest)
throws RemoteException;
PingImpl.Java
================
public class PingImpl implements Ping
public java.util.Calendar ping(java.util.Calendar pingDateRequest) throws RemoteException {
System.out.println("PingImpl: ping() return datetime = " + pingDateRequest.toString());
return pingDateRequest;
6. Now I recompile both the java files.
7. Withour regenerating the Web Service I deploy the Web Service on OC4j 10.0.3 from JDeveloper. This time the deployment was sucessful.(The Deployment fails if I don't follow the step 5.)
8. Now I generated a Stub from JDeveloper and accessed the stub from a client. It works fine. Here if you see the Stub code it takes java.util.Date as a parameter and returns a java.util.Date. (Mind you I am accepting a java.util.Calendar and returning the same in my Web Service interface. Step 5)
The confusing thing is the Serialization and Deserialization of Data from Client java data to Soap message and Soap message to Server java data.
From Client to SOAP :
java.util.Date to datetime
From SOAP to Server :
datetime to java.util.Calendar
From Server to SOAP :
java.util.Calendar to datetime
From SOAP to Client :
datetime to java.util.Date (I am not able to understand this part of the conversion)
Any help or inputs would be appreciated.
Thanks
Sachin Mathias -
How can I return a big amount of data from a stored procedure?
How can I return a big amount of data from a stored procedure in a efficient way ?
For example not using a cursor for going through all the rows and then assign the values to variables.
thanks in advance!Let's see if I'm able to explain myself..
I have a SQL query with..about 190.000 (in the best fo the the options)
I have something like this in my stored procedure..
FOR REC IN trn_adj_no
LOOP
REC_PIPE.INSTANCE_ID:=REC.INSTANCE_ID;
REC_PIPE.PROCESS_ID:=REC.PROCESS_ID;
REC_PIPE.ENTITY_TYPE:='TRANSACTION';
REC_PIPE.CRES_FILENAME:=REC.CRES_FILENAME;
REC_PIPE.CHUNK_REVISION_SK:=P_CHUNK_REVISION_SK;
REC_PIPE.CHUNK_ID:=trim(p_chunk_id);
REC_PIPE.FCL_SK:=REC.FCL_SK;
REC_PIPE.FCL_TRADE_SK:=REC.FCL_TRADE_SK;
REC_PIPE.FCL_VALUATION_SK:=REC.FCL_VALUATION_SK;
REC_PIPE.FCL_BUSINESS_GROUP:=REC.FCL_BUSINESS_GROUP;
REC_PIPE.ABS_TRN_CD:=REC.ABS_TRN_CD;
REC_PIPE.ACC_INTEREST_IMP_LOAN_CCY_IFRS:=REC.ACC_INTEREST_IMP_LOAN_CCY_IFRS;
REC_PIPE.ACC_INTEREST_IMP_LOAN_IFRS:=REC.ACC_INTEREST_IMP_LOAN_IFRS;
REC_PIPE.ACCRUED_INT_AMT:=REC.ACCRUED_INT_AMT;
REC_PIPE.ACCRUED_INT_CCY_CD:=REC.ACCRUED_INT_CCY_CD;
REC_PIPE.AMORT_ID:=REC.AMORT_ID;
REC_PIPE.AMORT_IND:=REC.AMORT_IND;
REC_PIPE.ATI:=REC.ATI;
REC_PIPE.ATI_2:=REC.ATI_2;
REC_PIPE.ATI_2_AMT:=REC.ATI_2_AMT;
REC_PIPE.ATI_2_CCY_CD:=REC.ATI_2_CCY_CD;
REC_PIPE.ATI_AMT:=REC.ATI_AMT;
REC_PIPE.ATI_CCY_CD:=REC.ATI_CCY_CD;
REC_PIPE.AVG_MTH_DUE_AMT:=REC.AVG_MTH_DUE_AMT;
REC_PIPE.AVG_MTH_DUE_CCY_CD:=REC.AVG_MTH_DUE_CCY_CD;
REC_PIPE.AVG_YTD_DUE_AMT:=REC.AVG_YTD_DUE_AMT;
REC_PIPE.AVG_YTD_DUE_CCY_CD:=REC.AVG_YTD_DUE_CCY_CD;
REC_PIPE.BAL_SHEET_EXP_AMT:=REC.BAL_SHEET_EXP_AMT;
REC_PIPE.BAL_SHEET_EXP_AMT_IFRS:=REC.BAL_SHEET_EXP_AMT_IFRS;
REC_PIPE.BAL_SHEET_EXP_CCY_CD:=REC.BAL_SHEET_EXP_CCY_CD;
REC_PIPE.BAL_SHEET_EXP_CCY_CD_IFRS:=REC.BAL_SHEET_EXP_CCY_CD_IFRS;
REC_PIPE.BAL_SHEET_EXP_EUR_AMT:=REC.BAL_SHEET_EXP_EUR_AMT;
REC_PIPE.BAL_SHEET_EXP_EUR_AMT_IFRS:=REC.BAL_SHEET_EXP_EUR_AMT_IFRS;
REC_PIPE.BEN_CCDB_ID:=REC.BEN_CCDB_ID;
REC_PIPE.BEN_CD:=REC.BEN_CD;
REC_PIPE.BEN_SRC_CD:=REC.BEN_SRC_CD;
REC_PIPE.BOOK_CD:=REC.BOOK_CD;
REC_PIPE.BOOK_TYPE_CD:=REC.BOOK_TYPE_CD;
REC_PIPE.BOOK_VAL_AMT:=REC.BOOK_VAL_AMT;
REC_PIPE.BOOK_VAL_AMT_IFRS:=REC.BOOK_VAL_AMT_IFRS;
REC_PIPE.BOOK_VAL_CCY_CD:=REC.BOOK_VAL_CCY_CD;
REC_PIPE.BOOK_VAL_CCY_CD_IFRS:=REC.BOOK_VAL_CCY_CD_IFRS;
REC_PIPE.BOOK_VAL_US_GAAP_AMT:=REC.BOOK_VAL_US_GAAP_AMT;
REC_PIPE.BRANCH_ID:=REC.BRANCH_ID;
REC_PIPE.BRANCH_LOC_CD:=REC.BRANCH_LOC_CD;
REC_PIPE.BS_COMPEN_CD:=REC.BS_COMPEN_CD;
REC_PIPE.BUS_AREA_UBR_ID:=REC.BUS_AREA_UBR_ID;
REC_PIPE.CA_CD:=REC.CA_CD;
REC_PIPE.CAD_RISK_WEIGHT_PCT:=REC.CAD_RISK_WEIGHT_PCT;
REC_PIPE.CASH_SETTLE_IND:=REC.CASH_SETTLE_IND;
REC_PIPE.CLS_FLG:=REC.CLS_FLG;
REC_PIPE.COB_DT:=REC.COB_DT;
REC_PIPE.COL_AGMENT_SRC_CD:=REC.COL_AGMENT_SRC_CD;
REC_PIPE.CONSOLIDATION_PCT:=REC.CONSOLIDATION_PCT;
REC_PIPE.CONTRACT_AMT:=REC.CONTRACT_AMT;
REC_PIPE.CONTRACT_COUNT:=REC.CONTRACT_COUNT;
REC_PIPE.COST_UNSEC_WORKOUT_AMT:=REC.COST_UNSEC_WORKOUT_AMT;
REC_PIPE.CPTY_CCDB_ID:=REC.CPTY_CCDB_ID;
REC_PIPE.CPTY_CD:=REC.CPTY_CD;
REC_PIPE.CPTY_LONG_NAME:=REC.CPTY_LONG_NAME;
REC_PIPE.CPTY_SRC_PROXY_UBR_ID:=REC.CPTY_SRC_PROXY_UBR_ID;
REC_PIPE.CPTY_TYPE_CD:=REC.CPTY_TYPE_CD;
REC_PIPE.CPTY_UBR_ID:=REC.CPTY_UBR_ID;
REC_PIPE.CREDIT_LINE_NET_IND:=REC.CREDIT_LINE_NET_IND;
REC_PIPE.CRES_SYS_ID:=REC.CRES_SYS_ID;
REC_PIPE.CTRY_RISK_PROVISION_BAL_AMT:=REC.CTRY_RISK_PROVISION_BAL_AMT;
REC_PIPE.CUR_NOTIONAL_AMT:=REC.CUR_NOTIONAL_AMT;
REC_PIPE.CUR_NOTIONAL_CCY_CD:=REC.CUR_NOTIONAL_CCY_CD;
REC_PIPE.CUR_NOTIONAL_CCY_CD_IFRS:=REC.CUR_NOTIONAL_CCY_CD_IFRS;
REC_PIPE.CUR_NOTIONAL_AMT_IFRS:=REC.CUR_NOTIONAL_AMT_IFRS;
REC_PIPE.DB_ENTITY_TRANSFER_ASSETS_CD:=REC.DB_ENTITY_TRANSFER_ASSETS_CD;
REC_PIPE.DEAL_TYPE_CD:=REC.DEAL_TYPE_CD;
REC_PIPE.DECOMPOSITION_IDENTIFIER:=REC.DECOMPOSITION_IDENTIFIER;
REC_PIPE.DEF_LOAN_FEE_IFRS:=REC.DEF_LOAN_FEE_IFRS;
REC_PIPE.DEF_LOAN_FEE_USGAAP:=REC.DEF_LOAN_FEE_USGAAP;
REC_PIPE.DELIVERY_DT:=REC.DELIVERY_DT;
REC_PIPE.DERIV_NOT_DT:=REC.DERIV_NOT_DT;
REC_PIPE.DERIV_NOT_IND:=REC.DERIV_NOT_IND;
REC_PIPE.DESK:=REC.DESK;
REC_PIPE.DIVISION_UBR_ID:=REC.DIVISION_UBR_ID;
REC_PIPE.ENTITY_CCDB_ID:=REC.ENTITY_CCDB_ID;
REC_PIPE.FAC_CD:=REC.FAC_CD;
REC_PIPE.FAC_LIMIT_CD:=REC.FAC_LIMIT_CD;
REC_PIPE.FAC_LIMIT_SRC_CD:=REC.FAC_LIMIT_SRC_CD;
REC_PIPE.FAC_SRC_CD:=REC.FAC_SRC_CD;
REC_PIPE.FAIR_VAL_CD_IFRS:=REC.FAIR_VAL_CD_IFRS;
REC_PIPE.FED_CLASS_CD:=REC.FED_CLASS_CD;
REC_PIPE.FIRST_RISK_PROVISION_DT:=REC.FIRST_RISK_PROVISION_DT;
REC_PIPE.FV_IMP_LOSS_CRED_CCY_IFRS:=REC.FV_IMP_LOSS_CRED_CCY_IFRS;
REC_PIPE.FV_IMP_LOSS_CRED_IFRS:=REC.FV_IMP_LOSS_CRED_IFRS;
REC_PIPE.FV_IMP_LOSS_CRED_YTD_CCY_IFRS:=REC.FV_IMP_LOSS_CRED_YTD_CCY_IFRS;
REC_PIPE.FV_IMP_LOSS_CRED_YTD_IFRS:=REC.FV_IMP_LOSS_CRED_YTD_IFRS;
REC_PIPE.GEN_RISK_PROVISION_BAL_AMT:=REC.GEN_RISK_PROVISION_BAL_AMT;
REC_PIPE.GL_PROFIT_CENTRE:=REC.GL_PROFIT_CENTRE;
REC_PIPE.GLOBAL_GL_CD:=REC.GLOBAL_GL_CD;
REC_PIPE.IFRS_POSITION:=REC.IFRS_POSITION;
REC_PIPE.IFRS_POSITION_AGGR:=REC.IFRS_POSITION_AGGR;
REC_PIPE.IMP_DT:=REC.IMP_DT;
REC_PIPE.IMP_METHOD_CD:=REC.IMP_METHOD_CD;
REC_PIPE.INT_COMPEN_CD:=REC.INT_COMPEN_CD;
REC_PIPE.INTER_IND:=REC.INTER_IND;
REC_PIPE.INTERCO_IND:=REC.INTERCO_IND;
REC_PIPE.INTERCO_IND_IFRS:=REC.INTERCO_IND_IFRS;
REC_PIPE.LOAN_PUR_FAIR_VAL_ADJ_AMT:=REC.LOAN_PUR_FAIR_VAL_ADJ_AMT;
REC_PIPE.LOCAL_GL_CD:=REC.LOCAL_GL_CD;
REC_PIPE.LOWEST_LEVEL_UBR_ID:=REC.LOWEST_LEVEL_UBR_ID;
REC_PIPE.LTD_FEES_TO_PRINCIPAL_AMT:=REC.LTD_FEES_TO_PRINCIPAL_AMT;
REC_PIPE.MA_CD:=REC.MA_CD;
REC_PIPE.MA_SPL_NOTE:=REC.MA_SPL_NOTE;
REC_PIPE.MA_SRC_CD:=REC.MA_SRC_CD;
REC_PIPE.MA_TYPE_CD:=REC.MA_TYPE_CD;
REC_PIPE.MAN_LINK_ID:=REC.MAN_LINK_ID;
REC_PIPE.MASTER_MA_CD:=REC.MASTER_MA_CD;
REC_PIPE.MATURITY_DT:=REC.MATURITY_DT;
REC_PIPE.MAX_OUT_AMT:=REC.MAX_OUT_AMT;
REC_PIPE.MAX_OUT_CCY_CD:=REC.MAX_OUT_CCY_CD;
REC_PIPE.MTM_AMT:=REC.MTM_AMT;
REC_PIPE.MTM_AMT_IFRS:=REC.MTM_AMT_IFRS;
REC_PIPE.MTM_CCY_CD:=REC.MTM_CCY_CD;
REC_PIPE.MTM_CCY_CD_IFRS:=REC.MTM_CCY_CD_IFRS;
REC_PIPE.NEW_RISK_PROVISION_AMT:=REC.NEW_RISK_PROVISION_AMT;
REC_PIPE.NON_PERF_IND:=REC.NON_PERF_IND;
REC_PIPE.NON_PERF_RCV_INT_AMT:=REC.NON_PERF_RCV_INT_AMT;
REC_PIPE.OPT_TYPE_CD:=REC.OPT_TYPE_CD;
REC_PIPE.ORIG_NOTIONAL_AMT:=REC.ORIG_NOTIONAL_AMT;
REC_PIPE.ORIG_NOTIONAL_CCY_CD:=REC.ORIG_NOTIONAL_CCY_CD;
REC_PIPE.ORIG_TRN_CD:=REC.ORIG_TRN_CD;
REC_PIPE.ORIG_TRN_SRC_CD:=REC.ORIG_TRN_SRC_CD;
REC_PIPE.OTHER_CUR_NOTIONAL_AMT:=REC.OTHER_CUR_NOTIONAL_AMT;
REC_PIPE.OTHER_CUR_NOTIONAL_CCY_CD:=REC.OTHER_CUR_NOTIONAL_CCY_CD;
REC_PIPE.OTHER_ORIG_NOTIONAL_AMT:=REC.OTHER_ORIG_NOTIONAL_AMT;
REC_PIPE.OTHER_ORIG_NOTIONAL_CCY_CD:=REC.OTHER_ORIG_NOTIONAL_CCY_CD;
REC_PIPE.OVERDUE_AMT:=REC.OVERDUE_AMT;
REC_PIPE.OVERDUE_CCY_CD:=REC.OVERDUE_CCY_CD;
REC_PIPE.OVERDUE_DAY_COUNT:=REC.OVERDUE_DAY_COUNT;
REC_PIPE.PAY_CONTRACT_AMT:=REC.PAY_CONTRACT_AMT;
REC_PIPE.PAY_CONTRACT_CCY_CD:=REC.PAY_CONTRACT_CCY_CD;
REC_PIPE.PAY_FWD_AMT:=REC.PAY_FWD_AMT;
REC_PIPE.PAY_FWD_CCY_CD:=REC.PAY_FWD_CCY_CD;
REC_PIPE.PAY_INT_INTERVAL:=REC.PAY_INT_INTERVAL;
REC_PIPE.PAY_INT_RATE:=REC.PAY_INT_RATE;
REC_PIPE.PAY_INT_RATE_TYPE_CD:=REC.PAY_INT_RATE_TYPE_CD;
REC_PIPE.PAY_NEXT_FIX_CPN_DT:=REC.PAY_NEXT_FIX_CPN_DT;
REC_PIPE.PAY_UL_SEC_TYPE_CD:=REC.PAY_UL_SEC_TYPE_CD;
REC_PIPE.PAY_UL_ISS_CCDB_ID:=REC.PAY_UL_ISS_CCDB_ID;
REC_PIPE.PAY_UL_MTM_AMT:=REC.PAY_UL_MTM_AMT;
REC_PIPE.PAY_UL_MTM_CCY_CD:=REC.PAY_UL_MTM_CCY_CD;
REC_PIPE.PAY_UL_SEC_CCY_CD:=REC.PAY_UL_SEC_CCY_CD;
REC_PIPE.PAY_UL_SEC_CD:=REC.PAY_UL_SEC_CD;
REC_PIPE.PCP_TRANSACTION_SK:=REC.PCP_TRANSACTION_SK;
REC_PIPE.PROD_AREA_UBR_ID:=REC.PROD_AREA_UBR_ID;
REC_PIPE.QUOTA_PART_AMT:=REC.QUOTA_PART_AMT;
REC_PIPE.RCV_CONTRACT_AMT:=REC.RCV_CONTRACT_AMT;
REC_PIPE.RCV_CONTRACT_CCY_CD:=REC.RCV_CONTRACT_CCY_CD;
REC_PIPE.RCV_FWD_AMT:=REC.RCV_FWD_AMT;
REC_PIPE.RCV_FWD_CCY_CD:=REC.RCV_FWD_CCY_CD;
REC_PIPE.RCV_INT_RATE:=REC.RCV_INT_RATE;
REC_PIPE.RCV_INT_RATE_TYPE_CD:=REC.RCV_INT_RATE_TYPE_CD;
REC_PIPE.RCV_INT_INTERVAL:=REC.RCV_INT_INTERVAL;
REC_PIPE.RCV_NEXT_FIX_CPN_DT:=REC.RCV_NEXT_FIX_CPN_DT;
REC_PIPE.RCV_UL_ISS_CCDB_ID:=REC.RCV_UL_ISS_CCDB_ID;
REC_PIPE.RCV_UL_MTM_AMT:=REC.RCV_UL_MTM_AMT;
REC_PIPE.RCV_UL_MTM_CCY_CD:=REC.RCV_UL_MTM_CCY_CD;
REC_PIPE.RCV_UL_SEC_CCY_CD:=REC.RCV_UL_SEC_CCY_CD;
REC_PIPE.RCV_UL_SEC_CD:=REC.RCV_UL_SEC_CD;
REC_PIPE.RCV_UL_SEC_TYPE_CD:=REC.RCV_UL_SEC_TYPE_CD;
REC_PIPE.REC_SEC_AMT:=REC.REC_SEC_AMT;
REC_PIPE.REC_SEC_CCY_CD:=REC.REC_SEC_CCY_CD;
REC_PIPE.REC_UNSEC_AMT:=REC.REC_UNSEC_AMT;
REC_PIPE.REC_UNSEC_CCY_CD:=REC.REC_UNSEC_CCY_CD;
REC_PIPE.RECON_CD:=REC.RECON_CD;
REC_PIPE.RECON_SRC_CD:=REC.RECON_SRC_CD;
REC_PIPE.RECOV_AMT:=REC.RECOV_AMT;
REC_PIPE.RECOVERY_FLAG:=REC.RECOVERY_FLAG;
REC_PIPE.REGULATORY_NET_IND:=REC.REGULATORY_NET_IND;
REC_PIPE.REL_RISK_PROVISION_AMT:=REC.REL_RISK_PROVISION_AMT;
REC_PIPE.RESPONSIBLE_BRANCH_CCDB_ID:=REC.RESPONSIBLE_BRANCH_CCDB_ID;
REC_PIPE.RESPONSIBLE_BRANCH_ID:=REC.RESPONSIBLE_BRANCH_ID;
REC_PIPE.RESPONSIBLE_BRANCH_LOC_CD:=REC.RESPONSIBLE_BRANCH_LOC_CD;
REC_PIPE.RESTRUCT_IND:=REC.RESTRUCT_IND;
REC_PIPE.RISK_END_DT:=REC.RISK_END_DT;
REC_PIPE.RISK_ENGINES_METHOD_USED:=REC.RISK_ENGINES_METHOD_USED;
REC_PIPE.RISK_MITIGATING_PCT:=REC.RISK_MITIGATING_PCT;
REC_PIPE.RISK_PROVISION_BAL_AMT:=REC.RISK_PROVISION_BAL_AMT;
REC_PIPE.RISK_PROVISION_CCY_CD:=REC.RISK_PROVISION_CCY_CD;
REC_PIPE.RISK_WRITE_OFF_AMT:=REC.RISK_WRITE_OFF_AMT;
REC_PIPE.RISK_WRITE_OFF_LIFE_DT_AMT:=REC.RISK_WRITE_OFF_LIFE_DT_AMT;
REC_PIPE.RT_BUS_AREA_UBR_ID:=REC.RT_BUS_AREA_UBR_ID;
REC_PIPE.RT_CB_CCDB_ID:=REC.RT_CB_CCDB_ID;
REC_PIPE.RT_COV_CD:=REC.RT_COV_CD;
REC_PIPE.RT_COV_SRC_CD:=REC.RT_COV_SRC_CD;
REC_PIPE.RT_COV_TYPE_CD:=REC.RT_COV_TYPE_CD;
REC_PIPE.RT_COV_TYPE_CD_IFRS:=REC.RT_COV_TYPE_CD_IFRS;
REC_PIPE.RT_TYPE_CD:=REC.RT_TYPE_CD;
REC_PIPE.RT_TYPE_CD_IFRS:=REC.RT_TYPE_CD_IFRS;
REC_PIPE.SENIORITY:=REC.SENIORITY;
REC_PIPE.SETTLE_STATUS_ID:=REC.SETTLE_STATUS_ID;
REC_PIPE.SETTLEMENT_CD:=REC.SETTLEMENT_CD;
REC_PIPE.SETTLEMENT_DT:=REC.SETTLEMENT_DT;
REC_PIPE.SOX_REF:=REC.SOX_REF;
REC_PIPE.SPE_IND:=REC.SPE_IND;
REC_PIPE.SPL_TREAT_IND_IFRS:=REC.SPL_TREAT_IND_IFRS;
REC_PIPE.SRC_PROD_TYPE_CD:=REC.SRC_PROD_TYPE_CD;
REC_PIPE.SRC_PROD_TYPE_CD_IFRS:=REC.SRC_PROD_TYPE_CD_IFRS;
REC_PIPE.SRC_PROXY_UBR_CD:=REC.SRC_PROXY_UBR_CD;
REC_PIPE.START_DT:=REC.START_DT;
REC_PIPE.STRATEGIC_LEND_IND:=REC.STRATEGIC_LEND_IND;
REC_PIPE.STRIKE_FWD_FUT_PRICE_AMT:=REC.STRIKE_FWD_FUT_PRICE_AMT;
REC_PIPE.STRIKE_FWD_FUT_PRICE_CCY_CD:=REC.STRIKE_FWD_FUT_PRICE_CCY_CD;
REC_PIPE.TERMINATION_LOAN_DT:=REC.TERMINATION_LOAN_DT;
REC_PIPE.TRAD_ASSET_CD_IFRS:=REC.TRAD_ASSET_CD_IFRS;
REC_PIPE.TRADE_DT:=REC.TRADE_DT;
REC_PIPE.TRADE_ENTITY_CCDB_ID:=REC.TRADE_ENTITY_CCDB_ID;
REC_PIPE.TRADE_ENTITY_LOC_CD:=REC.TRADE_ENTITY_LOC_CD;
REC_PIPE.TRADE_RELATED_IND:=REC.TRADE_RELATED_IND;
REC_PIPE.TRADE_STATUS:=REC.TRADE_STATUS;
REC_PIPE.TRADING_ENTITY_LOC_CD:=REC.TRADING_ENTITY_LOC_CD;
REC_PIPE.TRAN_MATCH_CD:=REC.TRAN_MATCH_CD;
REC_PIPE.TRN_CD:=REC.TRN_CD;
REC_PIPE.TRN_LINK_CD:=REC.TRN_LINK_CD;
REC_PIPE.TRN_SRC_CD:=REC.TRN_SRC_CD;
REC_PIPE.TRN_TYPE_CD:=REC.TRN_TYPE_CD;
REC_PIPE.TRN_VERSION:=REC.TRN_VERSION;
REC_PIPE.UL_DELIVERY_DT:=REC.UL_DELIVERY_DT;
REC_PIPE.UL_MATURITY_DT:=REC.UL_MATURITY_DT;
REC_PIPE.UNDLY_ISS_NAME:=REC.UNDLY_ISS_NAME;
REC_PIPE.UNEARNED_INCOME_CCY_CD:=REC.UNEARNED_INCOME_CCY_CD;
REC_PIPE.UNEARNED_INCOME_DIS_LOAN_AMT:=REC.UNEARNED_INCOME_DIS_LOAN_AMT;
REC_PIPE.US_GAAP_POSITION_AGGR:=REC.US_GAAP_POSITION_AGGR;
REC_PIPE.VALUATION_DT:=REC.VALUATION_DT;
REC_PIPE.XCHG_CTRY_CD:=REC.XCHG_CTRY_CD;
REC_PIPE.YEAR01_NOTIONAL_AMT:=REC.YEAR01_NOTIONAL_AMT;
REC_PIPE.YEAR02_NOTIONAL_AMT:=REC.YEAR02_NOTIONAL_AMT;
REC_PIPE.YEAR03_NOTIONAL_AMT:=REC.YEAR03_NOTIONAL_AMT;
REC_PIPE.YEAR04_NOTIONAL_AMT:=REC.YEAR04_NOTIONAL_AMT;
REC_PIPE.YEAR05_NOTIONAL_AMT:=REC.YEAR05_NOTIONAL_AMT;
REC_PIPE.YEAR06_NOTIONAL_AMT:=REC.YEAR06_NOTIONAL_AMT;
REC_PIPE.YEAR07_NOTIONAL_AMT:=REC.YEAR07_NOTIONAL_AMT;
REC_PIPE.YEAR08_NOTIONAL_AMT:=REC.YEAR08_NOTIONAL_AMT;
REC_PIPE.YEAR09_NOTIONAL_AMT:=REC.YEAR09_NOTIONAL_AMT;
REC_PIPE.YEAR10_NOTIONAL_AMT:=REC.YEAR10_NOTIONAL_AMT;
REC_PIPE.YTD_PL_TRADE_AMT:=REC.YTD_PL_TRADE_AMT;
REC_PIPE.FCL_VALIDATED_IND:=REC.FCL_VALIDATED_IND;
REC_PIPE.FCL_EXCLUDED_IND:=REC.FCL_EXCLUDED_IND;
REC_PIPE.FCL_SOURCE_SYSTEM:=REC.FCL_SOURCE_SYSTEM;
REC_PIPE.FCL_CREATE_TIMESTAMP:=REC.FCL_CREATE_TIMESTAMP;
REC_PIPE.FCL_UPDATE_TIMESTAMP:=REC.FCL_UPDATE_TIMESTAMP;
REC_PIPE.FCL_TRADE_LOAD_DATE:=REC.FCL_TRADE_LOAD_DATE;
REC_PIPE.FCL_VALUATION_LOAD_DATE:=REC.FCL_VALUATION_LOAD_DATE;
REC_PIPE.FCL_MATRIX_TRADE_TYPE:=REC.FCL_MATRIX_TRADE_TYPE;
REC_PIPE.PCP_GCDS_REVISION:=REC.PCP_GCDS_REVISION;
REC_PIPE.FCL_UTP_BOOK_CD:=REC.FCL_UTP_BOOK_CD;
REC_PIPE.FCL_MIS_RISK_BOOK_CD:=REC.FCL_MIS_RISK_BOOK_CD;
REC_PIPE.ALD_STATUS:=REC.ALD_STATUS;
REC_PIPE.FCAT_OPERATION:=REC.FCAT_OPERATION;
REC_PIPE.INTERNAL_INTRA_IND_IFRS:=REC.INTERNAL_INTRA_IND_IFRS;
REC_PIPE.FCL_USAGE_IND:=REC.FCL_USAGE_IND;
REC_PIPE.QUICK:=REC.QUICK;
REC_PIPE.SEDOL:=REC.SEDOL;
REC_PIPE.CUSIP:=REC.CUSIP;
REC_PIPE.ISIN:=REC.ISIN;
REC_PIPE.QUANTITY:=REC.QUANTITY;
REC_PIPE.RIC:=REC.RIC;
REC_PIPE.DESCRIPTION:=REC.DESCRIPTION;
REC_PIPE.RESET_DATE:=REC.RESET_DATE;
REC_PIPE.PRICE:=REC.PRICE;
REC_PIPE.EXCHANGERATE:=REC.EXCHANGERATE;
REC_PIPE.PARA_PROD_TYPE_ID:=REC.PARA_PROD_TYPE_ID;
REC_PIPE.EFF_INT_RATE:=REC.EFF_INT_RATE;
REC_PIPE.ORIG_FEE_UNREALISED_AMT:=REC.ORIG_FEE_UNREALISED_AMT;
REC_PIPE.ASSET_TYPE:=REC.ASSET_TYPE;
REC_PIPE.IMP_IND_IFRS:=REC.IMP_IND_IFRS;
REC_PIPE.NOT_AMT_REDEMPTION_TO_1YR:=REC.NOT_AMT_REDEMPTION_TO_1YR;
REC_PIPE.NOT_AMT_REDEMPTION_TO_5YR:=REC.NOT_AMT_REDEMPTION_TO_5YR;
REC_PIPE.NOT_AMT_REDEMPTION_OVER_5YR:=REC.NOT_AMT_REDEMPTION_OVER_5YR;
REC_PIPE.CASH_LTD:=REC.CASH_LTD;
REC_PIPE.CASH_LTD_CCY:=REC.CASH_LTD_CCY;
REC_PIPE.FCL_FACILITY_SK:=REC.FCL_FACILITY_SK;
REC_PIPE.DILUTION_RISK_CRITERIA:=REC.DILUTION_RISK_CRITERIA;
REC_PIPE.FCL_RMS_RUNID:=REC.FCL_RMS_RUNID;
REC_PIPE.BSTYPE:=REC.BSTYPE;
REC_PIPE.YTD_ACCR_DIV:=REC.YTD_ACCR_DIV;
REC_PIPE.YTD_DIV:=REC.YTD_DIV;
REC_PIPE.ACC_ADJ_YTD:=REC.ACC_ADJ_YTD;
REC_PIPE.FV_RLZD_PL:=REC.FV_RLZD_PL;
REC_PIPE.ITD_PL:=REC.ITD_PL;
REC_PIPE.YTD_RLZD_PL:=REC.YTD_RLZD_PL;
REC_PIPE.YTD_UNRLZD_PL:=REC.YTD_UNRLZD_PL;
REC_PIPE.TRN_BAS_LGD:=REC.TRN_BAS_LGD;
REC_PIPE.TRAD_YTD_RLZD_PL:=REC.TRAD_YTD_RLZD_PL;
REC_PIPE.TRAD_YTD_UNRLZD_PL:=REC.TRAD_YTD_UNRLZD_PL;
REC_PIPE.UNADJUSTED_PV:=REC.UNADJUSTED_PV;
REC_PIPE.UNADJUSTED_REALISED_PL:=REC.UNADJUSTED_REALISED_PL;
REC_PIPE.UNADJUSTED_UNREALISED_PL:=REC.UNADJUSTED_UNREALISED_PL;
REC_PIPE.GRC_PROD_TYPE_ID:=REC.GRC_PROD_TYPE_ID;
REC_PIPE.GRC_PROD_TYPE_ID_IFRS:=REC.GRC_PROD_TYPE_ID_IFRS;
REC_PIPE.CUR_FEE:=REC.CUR_FEE;
REC_PIPE.SEC_IND:=REC.SEC_IND;
REC_PIPE.INVEST_ASSETS_PORT:=REC.INVEST_ASSETS_PORT;
REC_PIPE.RISK_PROVISION_START_BAL_AMT:=REC.RISK_PROVISION_START_BAL_AMT;
REC_PIPE.GEN_RISK_PRV_START_BAL_AMT:=REC.GEN_RISK_PRV_START_BAL_AMT;
REC_PIPE.GEN_RISK_PROVISION_NEW:=REC.GEN_RISK_PROVISION_NEW;
REC_PIPE.GEN_RISK_PROVISION_REL:=REC.GEN_RISK_PROVISION_REL;
REC_PIPE.ACQUIRED_IND:=REC.ACQUIRED_IND;
REC_PIPE.CRED_NET_MNA:=REC.CRED_NET_MNA;
REC_PIPE.SEC_IFRS_VUE_ADJ:=REC.SEC_IFRS_VUE_ADJ;
REC_PIPE.YEAR00_NOTIONAL_AMT:=REC.YEAR00_NOTIONAL_AMT;
REC_PIPE.MAX_OVERDUE_DAYS:=REC.MAX_OVERDUE_DAYS;
REC_PIPE.MIS_CD:=REC.MIS_CD;
REC_PIPE.MULTINAME_POOL_SK:=REC.MULTINAME_POOL_SK;
REC_PIPE.MULTINAME_CHUNK_REVISION_SK:=REC.MULTINAME_CHUNK_REVISION_SK;
REC_PIPE.MTRX_CALC_CNTRL_EPE:=REC.MTRX_CALC_CNTRL_EPE;
REC_PIPE.MTRX_CALC_CNTRL_PFE:=REC.MTRX_CALC_CNTRL_PFE;
REC_PIPE.FCL_TE_VALIDATED_IND:=REC.FCL_TE_VALIDATED_IND;
REC_PIPE.PCP_TE_DYNAMIC_KEY:=REC.PCP_TE_DYNAMIC_KEY;
REC_PIPE.AVG_COST:=REC.AVG_COST;
REC_PIPE.SEC_LONG_NAME:=REC.SEC_LONG_NAME;
REC_PIPE.ISS_CTRY_CD:=REC.ISS_CTRY_CD;
REC_PIPE.RISK_REPORTING_UBR:=REC.RISK_REPORTING_UBR;
REC_PIPE.RISK_COVERING_BRANCH_CCDB:=REC.RISK_COVERING_BRANCH_CCDB;
REC_PIPE.CLEARING_STATUS:=REC.CLEARING_STATUS;
REC_PIPE.FCL_CPTY_SK:=REC.FCL_CPTY_SK;
REC_PIPE.STRGRP:=REC.STRGRP;
REC_PIPE.OPEN_ENDED_FLAG:=REC.OPEN_ENDED_FLAG;
REC_PIPE.AVAILABILITY_IND:=REC.AVAILABILITY_IND;
REC_PIPE.ESCRW_FLG:=REC.ESCRW_FLG;
REC_PIPE.ESTABLISHED_RELP_FLG:=REC.ESTABLISHED_RELP_FLG;
REC_PIPE.GOV_GTY_AMT:=REC.GOV_GTY_AMT;
REC_PIPE.BUBA_CTRY_ID:=REC.BUBA_CTRY_ID;
REC_PIPE.GOV_GTY_CTRY_CD:=REC.GOV_GTY_CTRY_CD;
REC_PIPE.INTERNET_DPST_FLG:=REC.INTERNET_DPST_FLG;
REC_PIPE.LAST_ACTIVITY_DT:=REC.LAST_ACTIVITY_DT;
REC_PIPE.NOTICE_PERIOD_QTY:=REC.NOTICE_PERIOD_QTY;
REC_PIPE.OPR_RELP_FLG:=REC.OPR_RELP_FLG;
REC_PIPE.SIG_WD_PENALTY_FLG:=REC.SIG_WD_PENALTY_FLG;
REC_PIPE.TRN_ACT_FLG:=REC.TRN_ACT_FLG;
PIPE ROW(REC_PIPE);
END LOOP;
the Stored procedre returns REC_PIPE.
I thins this could be not efficient enough...
What do you think? -
How to return the correct row of data using diffferent conditions?
I am having some problems with an sql query and I hope someone can help please?
The data I am using is customers with multiple transactions. If a customer contains one transaction where the transaction type = 'W' then I need to set the output value to be transaction.ValueA. If the customer does not contain any transactions where the transaction type is 'W' then I need to set the output value to be
the most recent transaction.ValueB where transaction.transaction_date <= customer.cust_mod_date.
Here is an example of the data. For each test customer 10 and 20 I have put a star against the value I want to return
CUSTOMER_ID CUST_MOD_DATE TX_DATE TX_TYPE TX_VALUEA TX_VALUEB
10 15/07/2009 16/07/2009 A 110 95
10 15/07/2009 14/07/2009 A 100 90(*)
10 15/07/2009 13/07/2009 A 90 10
10 15/07/2009 12/07/2009 A 80 5
20 15/07/2009 15/07/2009 A 60 10
20 15/07/2009 14/07/2009 W 50(*) 20
20 15/07/2009 13/07/2009 A 40 30
ie
CREATE TABLE
TMP_CUSTOMER (CUSTOMER_ID NUMBER, CUST_MOD_DATE DATE);
insert into tmp_customer
values(10, to_date('15/07/2009','dd/mm/yyyy'));
insert into tmp_customer
values(20, to_date('15/07/2009','dd/mm/yyyy'));
CREATE TABLE
TMP_TRANSACTION (TX_ID NUMBER, CUSTOMER_ID NUMBER, TX_DATE DATE, TX_TYPE VARCHAR2(1), TX_VALUEA NUMBER, TX_VALUEB NUMBER);
INSERT INTO TMP_TRANSACTION
VALUES (1,10, to_date('16/07/2009','dd/mm/yyyy'),'A',110,95);
INSERT INTO TMP_TRANSACTION
VALUES (2,10, to_date('14/07/2009','dd/mm/yyyy'),'A',100,90);
INSERT INTO TMP_TRANSACTION
VALUES (3,10, to_date('13/07/2009','dd/mm/yyyy'),'A',90,10);
INSERT INTO TMP_TRANSACTION
VALUES (4,10, to_date('12/07/2009','dd/mm/yyyy'),'A',80,5);
INSERT INTO TMP_TRANSACTION
VALUES (5,20, to_date('15/07/2009','dd/mm/yyyy'),'A',60,10);
INSERT INTO TMP_TRANSACTION
VALUES (6,20, to_date('14/07/2009','dd/mm/yyyy'),'W',50,20);
INSERT INTO TMP_TRANSACTION
VALUES (7,20, to_date('13/07/2009','dd/mm/yyyy'),'A',40,30);
The query I have so far is
(SELECT CUSTOMER_ID, CUST_MOD_DATE, TX_DATE, TYPE_FLAG, TX_VALUEA, TX_VALUEB, RN
FROM (SELECT CUST.CUSTOMER_ID, CUST.CUST_MOD_DATE,TRANS.TX_DATE, TRANS.TYPE_FLAG, TRANS.TX_VALUEA,TRANS.TX_VALUEB,
ROW_NUMBER() OVER (partition BY TRANS.CUSTOMER_ID ORDER BY TRANS.TX_DATE DESC) RN
FROM TMP_CUSTOMER CUST,
--- Return all transactions creating a type_flag field where Y = type W, else N ---
SELECT CUST.CUSTOMER_ID, TX.TX_DATE, TX.TX_VALUEA, TX.TX_VALUEB, CUST.CUST_MOD_DATE, TX.TX_TYPE,
CASE WHEN NVL(TX.TX_TYPE,'0') <> 'W' THEN 'N'
WHEN NVL(TX.TX_TYPE,'0') = 'W' THEN 'Y'
ELSE 'N'
END AS TYPE_FLAG
FROM TMP_TRANSACTION TX, TMP_CUSTOMER CUST
WHERE TX.CUSTOMER_ID = CUST.CUSTOMER_ID
AND CUST.CUSTOMER_ID in
'10','20'
) TRANS
WHERE CUST.CUSTOMER_ID = TRANS.CUSTOMER_ID
--AND TRANS.TX_DATE <= CUST.CUST_MOD_DATE
AND CUST.CUSTOMER_ID in
('10','20'
Can anyone please help with how I extract the record I am looking for
ie customer 10 has amount 90
customer 20 has amount 50.
Thanks :-)
GBSQL> select c_id
2 , cust_mod_date
3 , tx_date
4 , tx_type
5 , tx_valuea
6 , tx_valueb
7 from ( select c.customer_id c_id
8 , c.cust_mod_date
9 , t.tx_date
10 , t.tx_type
11 , t.tx_valuea
12 , t.tx_valueb
13 , row_number() over (partition by c.customer_id order by t.customer_id, t.tx_date desc) rn
14 from tmp_customer c
15 , tmp_transaction t
16 where t.customer_id = c.customer_id
17 and t.tx_date <= c.cust_mod_date
18 )
19 where case
20 when tx_type = 'W' then 1
21 when rn = 1
22 and not exists ( select null
23 from tmp_transaction t2
24 where t2.customer_id = c_id
25 and t2.tx_type = 'W'
26 )
27 then 1
28 end = 1;
C_ID CUST_MOD_ TX_DATE T TX_VALUEA TX_VALUEB
10 15-JUL-09 14-JUL-09 A 100 90
20 15-JUL-09 14-JUL-09 W 50 20
2 rows selected. -
Using CRUD procedures to update data and ref cursors to return data
Hi:
I am currently evaluating Apex 3.x to replace an existing app that uses lots of procedures to update and return data.
1. Is it possible to return data from a function that returns a cursor (or from a procedure that has an input/output ref cursor parameter for that matter) ? Example: Let's say I have the following function in a package:
function get_data return sys_refcursor
is
l_cursor sys_refcursor;
begin
open l_cursor for select sysdate as field from sys.dual;
return l_cursor;
end;
Can I add a page with a table that is populated based on this function? Based on my research it is not possible, but I want an APEX expert to confirm it
2. The old application uses CRUD procedures to update date, that is for each table there are 3 procedures, insert update and delete. Question: is it possible to channel all the update, inserts and deletes through these procedures? Furthermore, in lots of cases I use sequences to populate the primary keys, and the new value is returned as output parameter. Can I retrieve the output value and use it maybe in the next page I am branching to?
In the samples that I've seen the same form is used for insert and update. How do I distinguish between the two modes?
3. Can you please point me to some samples that show how to do 1 & 2. The standard samples that I've seen use the automatic row processing.
4. Could you please recommend some good books about Apex or HTML db? I found the documentation unintuitive. It is hard to picture quickly how things tie together by reading this documention. I wish the documentation was more task oriented and presented 'how to...' implement generic patterns used in web apps.
Thank you in advanceHi guys
Check out the last 2 posts in this thread for ideas on how to implement 1.
Report on user data from LDAP
Varad -
Return to the cell after data validation in JTable
Hi,
I am implementing an editable JTable. I want the focus or selection return to the current editing cell when the user inputing a wrong format data. I can catch the validation error and pop up a error message to user. But I can not return the focus or selection to the editing cell.
If anyone has already solved this problem, please give me your solution.
Thank you!
I have tried:
1.
In tableChanged(TableModelEvent e) method:
int row = e.getFirstRow();
int column = e.getColumn();
Object data = newJTable.getValueAt(row, column);
if(!validation(data)) // return true if validation OK
editFailed = true;//class variable
previousRow = row;//class variable
previousCol = column;//class variable
Add a focus listener to the table and implement the focus listener's focusLost method with:
if(validationFailed)
table.editCellAt(previousRow, previousCol);
This does move the focus to the editing cells if you want to continue to edit the table.
Problems are
If you move the focus out of the table, the wrong date will be in the table or not edited.
The selection color was shown on the next cell where you pointed your mouse to after you leave the editing cells.
2. I have also tried to use:
in the above focusLost method
table.clearSelection();
table.editCellAt(previousRow, previousCol);
table.setRowSelectionInterval(previousRow, previousRow);
table.setColumnSelectionInterval(previousCol, previousRow);
But it did not change the selection.
ShaolongThis is the fix for the above problem.
Basically we need to handle both mouse/keyboard actions on our own.
This code returns the control to errorCell..
/* TableCellValidator class */
/* The class basically validates the input entry in a cell and */
/* pops up a JOptionPane if its an invalid input */
/* And an OK is clicked on the JOptionPane, the control returns back */
/* to the same cell */
/* Basic Idea: The controls Arrow/Tab/mouse clicks are handled by our */
/* ----------- custom table. Its has been slightly tricky to handle */
/* mouse clicks, since when you click the next cell, the */
/* editingrow/editingcol advances. Hence the */
/* previousrow/previouscol has been captured in the */
/* setValueAt method. */
/* To capture Table/Arrow/Numeric Arrow, The keyStrokes(TAB etc)*/
/* assigned different AbstractionActions to execute like */
/* validateBeforeTabbingToNextCell */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCellValidator {
* Constructor.
* Basically instantiates the class and sets up the
* JFrame object and the table.
public TableCellValidator() {
JFrame f = new JFrame("JTable test");
f.getContentPane().add(new JScrollPane(createTable()), "Center");
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
* A method which created our custom table.
* The JTable methods processMouseEvent
* and setValueAt are overridden to handle
* Mouseclicks.
* The Tables ActionMap is fed with different
* AbstractAction classes eg: (validateBeforeTabbingToNextCell)
* (Scroll down below for the innerclass
* validateBeforeTabbingToNextCell).
* So basically when TAB is pressed the stuff present
* in the validateBeforeTabbingToNextCell's actionPerformed(..)
* method is performed.
* So we need to handle all the stuff a TAB does.
* ie. if a TAB hits the end of the row, we need to increment
* it to the next Row (if the validation is successful)
* in the current row etc..
* @return JTable
* @see validateBeforeTabbingToNextCell
* @see validateBeforeShiftTabbingToNextCell
* @see validateBeforeMovingToNextCell
* @see validateBeforeMovingDownToCell
* @see validateBeforeMovingUpToCell
* @see validateBeforeMovingLeftToCell
private JTable createTable() {
JTable table = new JTable(createModel()){
private int previousRow =0;
private int previousCol =0;
* Processes mouse events occurring on this component by
* dispatching them to any registered
* <code>MouseListener</code> objects.
* <p>
* This method is not called unless mouse events are
* enabled for this component. Mouse events are enabled
* when one of the following occurs:
* <p><ul>
* <li>A <code>MouseListener</code> object is registered
* via <code>addMouseListener</code>.
* </ul>
* <p>Note that if the event parameter is <code>null</code>
* the behavior is unspecified and may result in an
* exception.
* @param e the mouse event
* @see java.awt.event.MouseEvent
* @see java.awt.event.MouseListener
* @see #addMouseListener
* @see #enableEvents
* @since JDK1.1
protected void processMouseEvent(MouseEvent e) {
boolean canMoveFocus = true;
int currentRowAndColumn[] = getCurrentRowAndColumn(this); //we pull the current row and column
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
if ( e.getID() == MouseEvent.MOUSE_PRESSED || e.getID() == MouseEvent.MOUSE_CLICKED) {
stopCurrentCellBeingEdited(this); //stop the cellbeing edited to grab its value
final String value = (String)getModel().getValueAt(row,column);
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
JOptionPane.showMessageDialog(null,"Alpha value ="+ value ,"Invalid entry!",JOptionPane.WARNING_MESSAGE);
changeSelection(previousRow,previousCol, true, true);
editCellAt(previousRow, previousCol);
requestFocus(); // or t.getEditorCompo
if ( canMoveFocus ) {
super.processMouseEvent(e);
* The method setValueAt of the JTable is overridden
* to save the previousRow/previousCol to enable us to
* get back to the error cell when a Mouse is clicked.
* This is circumvent the problem, when a mouse is clicked in
* a different cell, the control goes to that cell and
* when you ask for getEditingRow , it returns the row that
* the current mouse click occurred. But we need a way
* to stop at the previous cell(ie. the cell that we were editing
* before the mouse click occurred) when an invalid data has
* been entered and return the focus to that cell
* @param aValue
* @param row
* @param col
public void setValueAt(Object aValue,int row, int col) {
this.previousRow = row;
this.previousCol = col;
super.setValueAt(aValue,row,col);
/* These are the various KeyStrokes like
ENTER,SHIFT-TAB,TAB,Arrow Keys,Numeric Arrow keys being assigned an Abstract action (key string ) in to the
inputMap first . Then an Action is assigned in the ActionMap object
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,0) ,"validateBeforeTabbingToNextCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,1) ,"validateBeforeShiftTabbingToNextCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0) ,"validateBeforeMovingToNextCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_KP_RIGHT,0) ,"validateBeforeMovingToNextCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,0) ,"validateBeforeMovingDownToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_KP_DOWN,0) ,"validateBeforeMovingDownToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0) ,"validateBeforeMovingDownToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP,0) ,"validateBeforeMovingUpToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_KP_UP,0) ,"validateBeforeMovingUpToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0) ,"validateBeforeMovingLeftToCell");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_KP_LEFT,0) ,"validateBeforeMovingLeftToCell");
table.getActionMap().put("validateBeforeTabbingToNextCell",
new validateBeforeTabbingToNextCell());
table.getActionMap().put("validateBeforeShiftTabbingToNextCell",
new validateBeforeShiftTabbingToNextCell());
table.getActionMap().put("validateBeforeMovingToNextCell",
new validateBeforeMovingToNextCell());
table.getActionMap().put("validateBeforeMovingDownToCell",
new validateBeforeMovingDownToCell());
table.getActionMap().put("validateBeforeMovingUpToCell",
new validateBeforeMovingUpToCell());
table.getActionMap().put("validateBeforeMovingLeftToCell",
new validateBeforeMovingLeftToCell());
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return table;
* A table model is created here for 5 rows/5 columns.
* And the isCellEditable is overridden to return true,
* indicating that the cell can be edited.
* So fine tuned control can be done here by saying,
* the user can be allowed to edit Row 1,3 or 5 only.
* or column 1 only etc..
* @return DefaultTableModel
private DefaultTableModel createModel() {
DefaultTableModel model = new DefaultTableModel(5, 5) {
public boolean isCellEditable(int row, int column) {
return true;
return model;
* This method basically returns the currentRow/currentCol value
* If the current Row/Col is being edited then
* it returns the getEditingRow/getEditingColumn
* If its not being edited,
* it return the getAnchorSelectionIndex of the JTables
* ListSelectionModel.
* If the column or row is -1, then it return 0.
* The first element in the int[] array is the row
* The second element in the int[] array is the column
* @param t input a JTable
* @return int[]
* @see ListSelectionModel
* @see JTable
private int[] getCurrentRowAndColumn(JTable t){
int[] currentRowAndColum = new int[2];
int row, column;
if (t.isEditing()) {
row = t.getEditingRow();
column = t.getEditingColumn();
} else {
row = t.getSelectionModel().getAnchorSelectionIndex();
if (row == -1) {
if (t.getRowCount() == 0) {
//actually this should never happen.. we need to return an exception
return null;
column =t.getColumnModel().getSelectionModel().getAnchorSelectionIndex();
if (column == -1) {
if (t.getColumnCount() == 0) {
//actually this should never happen.. we need to return an exception
return null;
column = 0;
currentRowAndColum[0]=row;
currentRowAndColum[1]=column;
return currentRowAndColum;
* Tbis basically a wrapper method for CellEditors,
* stopCellEditing method.
* We need to do this because,
* for instance we have entered a value in Cell[0,0] as 3
* and when we press TAB or mouse click or any other relevant
* navigation keys,
* ** IF the cell is BEING EDITED,
* when we do a getValueAt(cellrow,cellcol) at the TableModel
* level , it would return "null". To overcome this problem,
* we tell the cellEditor to stop what its doing. and then
* when you do a getValueAt[cellrow,cellcol] it would
* return us the current cells value
* @param t Input a JTable
* @see CellEditor
private void stopCurrentCellBeingEdited(JTable t){
CellEditor ce = t.getCellEditor(); /*this not the ideal way to do..
since there is no way the CellEditor could be null.
But a nullpointer arises when trying to work with mouse.. rather than just
keyboard" */
if (ce!=null) {
ce.stopCellEditing();
* The following Action class handles when a
* RIGHT ARROW or NUMERIC RIGHT ARROW is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move it to the
* next Cell.. else take it back to the currentCell
class validateBeforeMovingToNextCell extends AbstractAction {
* The following Action class handles when a
* DOWN ARROW or NUMERIC DOWN ARROW is pressed.
* There is just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move it to
* down by one Cell.. else take it back to the currentCell
* @param e
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
column++;
if (column >= t.getColumnCount())
column = column-1;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
* The following Action class handles when a
* DOWN ARROW or NUMERIC DOWN ARROW is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move it to the
* down by Cell.. else take it back to the currentCell
class validateBeforeMovingDownToCell extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
row++;
if (row >= t.getRowCount())
row = row - 1;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
* The following Action class handles when a
* UP ARROW or NUMERIC UP ARROW is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move the cursor/
* editable status up by a Cell.. else take it back to the currentCell
class validateBeforeMovingUpToCell extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
row--;
if (row <0)
row = 0;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
* The following Action class handles when a
* LEFT ARROW or NUMERIC LEFT ARROW is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move the cursor/
* editable status up by a Cell.. else take it back to the currentCell
class validateBeforeMovingLeftToCell extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
column--;
if (column <0)
column = 0;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
* The following Action class handles when a TAB is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move the cursor/
* editable status up by a Cell.. else take it back to the currentCell
class validateBeforeTabbingToNextCell extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
column++;
int rows = t.getRowCount(), columns = t.getColumnCount();
while (row < rows) {
while (column < columns) {
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
column++;
row++;
column = 0;
row = 0;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
* The following Action class handles when a SHIFT TAB is pressed.
* There just a basic checking for Numeric values
* (Integer.parseInt) inside the code.
* When validation is successfull, we need to move the cursor/
* editable status up by a Cell.. else take it back to the currentCell
class validateBeforeShiftTabbingToNextCell extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable t = (JTable) e.getSource();
int currentRowAndColumn[] = getCurrentRowAndColumn(t);
int row = currentRowAndColumn[0];
int column = currentRowAndColumn[1];
stopCurrentCellBeingEdited(t);
String value = (String)t.getModel().getValueAt(row,column);
if (value!= null && !value.equals("")) {
try {
Integer.parseInt(value);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Please input numeric values at cell[row="+row+","+"col="+column+"]","Invalid Input!!",JOptionPane.WARNING_MESSAGE);
t.changeSelection(row, column, true, true);
t.editCellAt(row,column);
t.getEditorComponent().requestFocus();
return;
column--;
int rows = t.getRowCount(), columns = t.getColumnCount();
while ((row < rows) && (row >= 0)) {
while ((column < columns) && (column >= 0)) {
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
column--;
row--;
column = columns - 1;
row = rows - 1;
if (t.isCellEditable(row, column)) {
t.changeSelection(row, column, true, true);
t.editCellAt(row, column);
if ((t.getEditingRow() == row)
&& (t.getEditingColumn() == column)) {
t.requestFocus();
return;
public static void main(String[] args) {
new TableCellValidator(); -
OSX Journaled-Can I use journal to return/restor settings to specified date
OK, so I've got my drive set to journaled mode. How to I make use of this.
Let's say for example, I wake up one morning and I'm told by my iPhoto that it can't find my iPhoto Library(it was there the night before)...Unstead of all this round about investigative work and two hours on the phone with Apple support and dozens of posts and replies in Apple Discussions, not to mention, untold hours and hours and hooouuuurrrrssss of searching my computer, draging...coping...rebuilding...ARRRGGGHHH!!!
Can't I simply "ask" my journaled drive to return/restore itself(settings and data) to it's original condition (based on giving it a specific time and/or date) as it had been the night before...before the evil computer gremlins plied their dasterdly deeds to my iMac while I slept!
Am I being nieve to imagine that the solution to so many and varied problems could actually be that simple...just go back in time?Can't I simply "ask" my journaled drive to
return/restore itself(settings and data) to it's
original condition
NO.
You are confusing journaling with the future Leopard Time machine's feature.
http://en.wikipedia.org/wiki/Journalingfilesystem
The only way to get back your data is backup them
Alberto -
Library Filter returns images of the wrong date
I have just moved from v3.6 to v4.3.
When using the library window, grid view, I use the filter bu selecting a specific date but images are being returned incorrectly.
For example:
When I select a date i.e. 25/05/2011, I have images being shown for that date but also others with a capture date of 06/02/2012.
How can this issue be corrected? I have over 60,000 images to review.Although I can understand why you think that a large catalogue might be more easily liable to corruption, I had read Adobe’s own comments which said that there is no problem with them.
In fact, the same source recommends that you should NOT have multiple catalogues.
I’ve just completed the re-import of my last v3 catalogue into the v3 software and then gone through my list of files, doing a manual check of each file on my list and compared its details to those before the upgrade.
The two lists do not match. Where the EXIF data was contained in the catalogue before the upgrade, now there are files where it is missing.
These errors match those seen in the v4 version.
As the upgrade was done on the following day, it isn’t likely to be a corruption of the v3 catalogue but it is probable an effect of the upgrade process as the v3 Catalogue is now showing a modified date the same as the date of the upgrade.
After my review of the files, it is clear that most of the files losing the metadata are Jpegs (approx. 80%), although the remainder are pretty evenly split between RAW and PSD files.
As the v3 is now flawed, I need to recreate the lost data.
The information missing from the metadata includes the EXIF & contact data & creation dates and some files are showing a creation date a year ahead of when they were actually taken.
Where the metadata remains intact on a RAW or a PSD file, is there any way to copy this to the Jpeg where it is missing?
If it can be copied, I presume that it isn't possible to do an automatic process that identifies images where file names are the same albeit the file extension is Jpeg or PSD?
Whilst discussing metadata, can I select the sections of metadata I use, or at can I rearrange the panel to show the sections I want ahead in the sequence above those I don’t so as to reduce the need for scrolling?
(I am aware that capture date can be amended in batches).
I greatly appreciate all your time and advice.
Fingers crossed that this can be finally sorted and not require too much effort from me to put the errors right!
Maybe you are looking for
-
How can I Create a exe file were a tab control on it work`s
I have a VI with many controls and indicators,these are spread on a tab control.This tab control works with out any problems but if i create a exe file then the tab control is fixed. How can I create a exe file so that the tab control on it work´s ?"
-
Greetings all. I am a networking newbie, and we're having some issues here at the shop. We've got a T1 coming into a Netopia router, which is going to a switch. From the switch, it's going to one of the Extremes (spaceship). I have setup the other Ex
-
Credit card Open sales order data migration
Hi All, My query for today is to know your experiences as to how to handle legacy data migration to SAP for Open transactions having credit card information. I mean in legacy we have Open orders with credit card information and some of them are appro
-
Hi, I have a hierarchy which has a root and two nodes....I want to display only the 1st node without drilling down to the 2nd node in my report.... I tried diabling the Expand to level option...but its not working...any suggestions.... Message was e
-
UK bank - First Direct - prevents Safari accessing internet banking
First Direct has just withdrawn access to its Internet Banking service for anyone using the Safari browser. No notice, no consultation, no explanation - just a screen saying (paraphrased) 'Safari not supported, go and get Firefox'. On calling the ban