BC4J based on a view
We have a updateable view (instead of trigger) based on two tables. Can we create a business component on top of this view that will allow inserts, updates and deletes? In our current trials, we get an ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc. Is what we are trying to do possible? If so, how?
As I understand it, in Oracle you can only update a view with more than one tables if it is a simple view. This means that the view cannot have group by or other complex statements. In my application I have to situations where I need to update views based on two tables.
Situation 1 is based on a simple view which equi-joins two tables. I created an entity object based on this view and can update it no problem.
Situation 2 is based on a complex view which joins multible tables. I created an view object based on this view to retrieve the records and display them. I created a second view at the database which was a simple view which contained only the fields I needed to update with no grouping or other complex functions. Then I created an entity object based on this simple view. When the user "updates" the complex entity through my application, it actually uses the second entity (and some lookups) to update the data.
There may be an easier way, but this is all I came up with. Hope it helped,
~Rob Lundeen
Similar Messages
-
ADF BC: Creating updatable VO based upon DB View with "instead of" trigger
Hello all,
I have got an interesting issue. I have an Oracle DB view that is used to hide some complexity in the underlying DB design (it does some unions). This view is updatable because we have created an "instead of" update trigger to update the correct table when a row is updated. This is working fine in SQL.
Next, we have created an ADF Entity object based upon the view, specifying an appropriate PK for the DB View. Then, we have created an updatable VO based upon the EO. All well and good so far. The issue we have is in trying to commit changes to the DB - because the ADF BC framework is trying to lock the row to update (using SELECT ... FOR UPDATE), it's not working because of ORA-02014 - cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
This leads me to thinking about overridding doSelect() on the EO as hinted here http://radio.weblogs.com/0118231/stories/2005/07/28/differenceBetweenViewObjectSelectAndEntityDoselectMethod.html
As a temporary test, we have over-ridden the EO's doSelect to call super.doSelect(false) and it does work, although we will have lost update issues as detailed in Steve's article.
My questions:
1). Is overriding doSelect() the correct thing here? Perhaps there is a better way of handling this problem? I do have a base EO class from which all of the EO's extend, so adding this behavior should be straightforward.
2). Does anyone have example doSelect implementation? I am thinking of overriding doSelect for my EO and calling super.doSelect (lock=false), but then I need to deal with some possible exceptions, no?
Kind regards,
JohnHi John,
I have exactly the same issue as you experienced back in January. I have a complex data modelling requirement which requires the need to pivot rows into columns using ROW_NUMBER() and PARTITION clauses. To hide the complexity from the middle tier, I have created a database view and appropriate INSTEAD OF triggers and mapped my EO to the view. I have overriden the lock() method on the EO implementation class (to avoid ORA-02014) and would like to try the same solution you used with the pl/sql call to lock the record.
My question is, how did you manage the release of the lock if the transaction was not rolled back or committed by your application i.e. if the user closed the browser for instance.
In my naivity, I would like to think that the BC4J framework would release any locks for the database session when it found the servlet session to be terminated however my concern is that the lock would persist and cause complications.
Any assistance greatly appreciated (if you would be willing to supply your lock() method and pl/sql procedure logic I would be even more grateful!).
Many thanks,
Dave
London -
Creating a dynamic Selection List based on a View Object
Hello,
I'm new to JDeveloper and I would like to create a JSP Page with dynamic Selection List based on a runtime query or based on a view object (BC4J). The selection made by an user should serve another dynamic query with the necessary parameters that I built using createViewObjectFromQueryStmt(). By now I tried this using the InputSelectLOV from the Component Palette in JDeveloper. But without success. By the way: the selection list is not very large (5 values), so it's not necessary to have a form finding the desired value.
Maybe someone had experience about creating this already. Please give me a tip or a little example.
Thanks.http://otn.oracle.com/products/jdev/howtos/jsp/renderers.html
-
BI Publisher report based on VO (View Objects)
Hi,
I would like to know, can we generate BI Publiher report based on VO (view Objects ). Actually we are creating VOs for ADF and want to know if that can be used for generting BIP report.
Thank,s
NirajHi Niraj
Yes, you can, there is a method on the VO to get the data from it in an XML format. Then use our APIs >> documentation to format it with a template.
Regards, Tim -
How to create ADF UI based on polymorphic view objects
Hi,
I'm using JDeveloper build JDEVADF_11.1.1.3.PS2_GENERIC_100408.2356.5660. I created a simple application based on Steve's example #10 [url http://blogs.oracle.com/smuenchadf/examples/]ViewRow and EntityObject Polymorphism.
I added a men-only attribute "Age" to the "Men" VO and filled it with an arbitrary value in MenRowImpl.java:
public String getAge() {
return (String) "45";//getAttributeInternal(AGE);
}Running the TestModule works perfectly - a row of type "Men" displays the "Age" attribute whereas a row of type "Women" doesn't.
Afterwards, I setup an ADF ViewController Project and created a JSPX with a read-only form based on the "People" datacontrol with navigation buttons. Running that page always shows the same set of attributes independent of the row type. That's expected behaviour because the binding is defined at design time.
So my question is: can I somehow achieve the same behaviour for polymorphic VOs as the business component tester shows?
Kind regards,
MarkusAndrejus' example shows how to calculate different values for the same attribute based on overridden view objects. That's not exactly what I'm looking for. I need to display a (at least partly) different set of attributes that changes while the user scrolls through the records of the result set.
-
How to create materialized view based on a view?
Hi,
I hope this is not very far fetched idea.
I have a very complex view and I would like to replicate it 'in place' that is I would like to make a materialized view that is based on this view complex view. I would like to use this materialized view (i.e table) to query data instead of using the original view, since it takes Oracle some 10-15 seconds to execute my query on the original view and I am not allowed to create indexes on most of the tables that are included in the original view.
Can this be done?
Best regards,
Tamas SzecsyThe best way to do this is to create a materialzed view based on the underlying code of the original view. If you don't have this handy, issue the following in sqlplus:
select text
from user_views
where view_name = 'NAME_OF_VIEW'
You can then cut and paste the sql statement into your create materialized view statement.
Please note, you will probable have to set the long parameter to a higher value to reveal the complete statement for example:
SQL> set long 2048 -
Is it possible to delete data from a block based on a view?
I have a data block based on a view. I have set the delete allowed property to 'yes' using the object navigator, have set the database permission to allow delete, done a search through all the code to see where the delete_allowed property on the block may be reset in some trigger yet cannot delete records from the block.
Any ideas?There are at least two/three ways to do this...
Put an on-delete trigger on the block of the view with code something like this...
delete from mytable where mytable_id = :myblock.mytable_id;
...or...
dont do the above and add an instead of trigger to the view in the database. The instead of trigger intercepts the delete statement that would fail and executes code that you write in the trigger to go delete in mytable "instead of" the view.
... or...
if you want to base a block on a procedure.. See this thread... Notice the metalink id in the thread..
Re: Data block based on a procedure..
Message was edited by:
Mark Reichman -
Hello,
Software: forms 10g
problem: I have one block in my form based on a view. It works fine for my English language selection. However, when I switch to French I encounter an error.
Example:
Block name: REQUESTS_VIEW
View_name: REQUESTS_VIEW
Table: Requests
Item_name: Office_id
Column_name: Office_id
Updatable/Queryable
Item_name: Office_Name
Column_name: Off_Eng_name
Query only option selected
LOV_OFFICE attached to item
Office table contains the following columns:
Office_id, Off_eng_name, Off_fre_name
In my view I use a decode function for each variable that needs to be translated so that I select the correct column from my table. I did the same for the LOV attached to the office_name item.
Problem: I cannot set the item_property column name to point to Off_fre_name when user selects French as a language, therefore, I get an error when I query. Oracle does not allow me to do that.
Possible solution: To redesign each table and add a language column as follows:
Office table
Office_id, Office_name, language
1, Head Office, 1
1, Bureau Chef, 0
language table
language_id, language_name
0, Français
1, English
However, this requires a redesign of my schema. Is there another way I can do this without changing the design structure?
Thank you very much!
ClaudiaAs of 'I cannot set the item_property column name to point to Off_fre_name when user selects French as a language, therefore, I get an error when I query', I feel that you need to have two items-one for Off_Eng_name and another one for Off_fre_name on your form regardless of the language choice, but you need per language choice to hide the other language item. This way you don't have the above headache.
-
Error when updating data in a form based in a view
Hi:
i have 5 tables for enterprise data (telephone, fax and so on). i want to create a form based in all those tables, so i create a view over all the 5 tables and create the form. but when calling the portlet and trying to alter (update, insert, etc.) the data i get this error. Seems that i missed to do something with my tables but i don't know what does that non key-preserved thing mean.The error is the following:
Error: Cannot link to the module: 1901051912 ORA-01445: cannot select ROWID from a join view without a key-preserved table (WWV-16062)
An unexpected error occurred: ORA-01445: cannot select ROWID from a join view without a key-preserved table (WWV-16016)
An unexpected error occurred: ORA-01445: cannot select ROWID from a join view without a key-preserved table-SELECT ROWID, IDBASE,NOMBRE,NOMBRE_FISCAL,NOTAS,BAJA,RETENCION,PREVISION_PAGOS,IVA,CIF,ID_DIRECCION,IDBASE_DIRECCION,CALLE,NUMERO,PISO,MANO,CODIGO_POSTAL,CIUDAD,ID_TELEFONO_EMP,IDBASE_TELEMP,TELEFONO_EMPRESA,ID_FAX_,IDBASE_FAXEMP,FAX,ID_EMAIL_EMP,IDBASE_EMAILEMP,E_MAIL FROM PTSS.A_VISTA where IDBASE=1 ORDER BY ROWID ASC (WWV-16016)
Any help will be welcomed.
Thanks in advance.
Regards. Urko.You cannot update, insert, or delete records from a form that's based on a view. That is because rowid is not in the view, so it cannot lock records.
-
Using geocode in a map based on a view where two datasets are joined
Hi,
I'd like to create a map based on a view in which two datasets are joined, where one of the datasets has a geocode column.
Unfortunately this is not working... It seems that a custom view where two datasets are joined together where one of them has a geocode column makes the geocode column invisible for the map component.
The following cases do work but we like to combine them so that we can combine different datasets in Studio without using the Integrator:
- I can create a custom view in which we join two datasets > the view can be used as a source for different component but not the map component (it seems that the geocode column is not found)
- I can create a custom view with a geocode column in it and that one can be used as a source for a map
What I'd like to show is that it is possbile to have one datasets coming from a source system and that it is easy to combine an additional excel sheet with geo-information and maybe another excel sheet with different measures. This should be possible since you can join different datasets together in a custom view.
Thanks in advance,
RichardOh sorry, we have two base views and one custom view:
base view TRIS_Omzet which gets it data from an OBI server and has data like revenue, customer, time, etc.
base view Endeca_Klanten which gets it data from an excel sheet, this view contains the name of the customer and the geocode of the customer's location
We created one custom view (Omzet_Geo) where the two base queries are joined together using the following query:
DEFINE V1 AS SELECT
"Endeca_Klanten.Klanten" AS Klant,
"Endeca_Klanten.Coordinaten" AS Coordinaten
from Endeca_Klanten;
DEFINE V2 AS SELECT
"TRIS_Omzet.Naam_Consultant" AS Naam_consultant,
"TRIS_Omzet.Jaar" AS Jaar,
"TRIS_Omzet.Jaar_week" AS Jaar_week,
"TRIS_Omzet.Actual" AS Actual,
"TRIS_Omzet.Omzet" AS Omzet,
"TRIS_Omzet.Partij" AS Partij,
"TRIS_Omzet.Uren" AS Uren
FROM TRIS_Omzet
DEFINE Omzet_Geo AS SELECT
V1.Klant AS Klant,
V1.Coordinaten AS Coordinaten,
V2.Naam_consultant AS Naam_consultant,
V2.Jaar AS Jaar,
V2.Jaar_week AS Jaar_week,
sum(V2.Actual) AS Actual,
sum(V2.Omzet) AS Omzet,
V2.Partij AS Partij,
sum(V2.Uren) AS Uren
from V1
right join V2
on (V1.Klant=V2.Partij)
group by Klant, Coordinaten, Naam_consultant,Jaar,Jaar_week,Partij
Our view definition in the GUI looks like the following, as shown in the screenshots the datatype of the coordinated column is a Geo column both in the base view and the custom view. However the view still can't be selected to be used as a source for the map component.
The two base views:
The custom view:
regards,
Richard -
Find the folder name based on the View Name
Hi ,
I need to find out a Folder name based on a View Name . Basically i know the view Name and want to find out the Folder that is created in Discovrer based out of that view.
Does any one know of any EUL table that stores this relationship.
Thanks in advance for your help
SunnyHi,
Your requirement can be fulfilled using the following script:
SELECT bas.ba_name,
bas.ba_id,
obj.obj_name folder,
decode(obj.obj_type,
'COBJ',
'Complex',
'SOBJ',
'Simple',
'CUO',
'Custom',
'Unknown') AS obj_type,
decode(obj.obj_hidden,0,'Bare','Hidden') IS_HIDDEN,
obj.sobj_ext_table folder_source_object
FROM eul10g_us.eul5_ba_obj_links bol,
eul10g_us.eul5_objs ; obj,
eul10g_us.eul5_bas ; bas
WHERE obj.obj_id = bol.bol_obj_id
AND bas.ba_id = bol.bol_ba_id
BUT
As you can see from the SQL, only simple folders are mapped to objects.
This means that if the object is used inside a custom folder or complex folder you will not see it.
Tamir -
Hello ppl, I need your help.
I got this query which is based on two views.
View_1: x1, x2, x3, x4, day, xy
View_2: y1, y2, y3, y4, day, xy
By running a SELECT query on each view takes approx 2 minutes, yes there are lots of records.
When I combine the query most of the time it times out. I think there is something wrong with my query.
View_1 = View_2 on col xy and day, however I have to get the records from View_2 for the following day, i.e if day = 3 from View_1 and the record from View_2 should be coming from view_2
at present my query is like this
SELECT a.x1, a.x2, a.x3, a.x4, a.day, a.xy, b.y1, b.y2
FROM view_1 a, view_2 b
WHERE b.y2= 100
AND a.xy = b.xy
AND b.y1 = ( SELECT b.y1
FROM view_1 a, view_2 b
WHERE b.day = a.day + 1)
ORDER BY a.x1
This query gets called in a coldfusion page.
P.S I can also ask the DBA to make me a new view based on the same columns as the query. Would that help with speed?I don't see any reason why my query shouldn't give
you what you desire.
View_1
x1 x2 x3 x4 Day XY
2 3 23 32 3 2132
3 3 2 3 4 2132
4 3 43 32 5 2132
View_2
y1 y2 y3 y4 Day XY
4 100 13 32 3 2132
5 100 4 3 4 2132
7 100 43 32 5 2132
5 100 23 12 6 2132
Is it a coincidence that XY has the same value in your sample? Could it be different
and at the same time participate in the desired result?
SELECT a.x1, a.x2, a.x3, a.x4, a.day, a.xy, b.y1, b.y2
FROM view_1 a
, view_2 b
WHERE b.y2 = 100
AND a.xy = b.xy
AND b.day = a.day + 1
ORDER BY a.x1
>
X1 X2 X3 X4 Day XY y1 y2
2 3 23 32 3 2132 5 100
3 3 2 3 4 2132 7 100
4 3 43 32 5 2132 5 100
According to the reply to my question above, it can be ok or not.
That is why I proposd this (in case the reply were yes):
SELECT a.x1, a.x2, a.x3, a.x4, a.day, a.xy, b.y1, b.y2
FROM view_1 a, view_2 b, vew_1 c
WHERE b.y2= 100
AND a.xy = b.xy
AND b.day = c.day + 1
ORDER BY a.x1 -
How to create LOV not based on a View Object attribute?
Hi,
I am creating a handed-made search form and I want to create an af:inputListOfValues.
I have :
- a read-only-view-object to get the LOV values from BD.
- af:inputListOfValues tag (droped from Component Palette).
How can I create the listOfValuesModel in Bindings layer? (the inputListOfValues is not based on a View Object attribute).Sorry, I think I am not very clear in my posts.
My requirement is to create a LOV but I have no ViewObject. I just want an input (not based on a view object attribute), alone, but with a LOV (where lov's datas are get from a view object).
In a "normal" LOV I would have something like this :
in jsff :
<af:inputListOfValues id="departmentIdId"
popupTitle="Search and Select: #{bindings.DepartmentId.hints.label}"
value="#{bindings.DepartmentId.inputValue}"
label="#{bindings.DepartmentId.hints.label}"
model="#{bindings.DepartmentId.listOfValuesModel}"
required="#{bindings.DepartmentId.hints.mandatory}"
columns="#{bindings.DepartmentId.hints.displayWidth}"
shortDesc="#{bindings.DepartmentId.hints.tooltip}">
<f:validator binding="#{bindings.DepartmentId.validator}"/>
<af:convertNumber groupingUsed="false"
pattern="#{bindings.DepartmentId.format}"/>
</af:inputListOfValues>in pageDef :
<listOfValues StaticList="false" IterBinding="EmployeesView1Iterator"
Uses="LOV_DepartmentId" id="DepartmentId"/>in model layer : a view object (EmployeeView) with view accessor and LOV based attribute, and a read only view object (DepartmentRVO) to get datas for the LOV.
But in my case I have no ViewObject, so I don't know how to create the listOfValuesModel in fragment pageDef.
I have :
<af:inputListOfValues label="Label 1"
popupTitle="Search and Result Dialog"
id="ilov1" model="here I want to point to a listOfValuesModel but I don't know how to create it"/>in pageDef : the listOfValuesModel but I don't know how to create it.
in model layer : just a read only view object (like DepartmentRVO), to get the datas for the LOV.
Edited by: h0s on 29 févr. 2012 00:31 -
Problem with replication based on materialized view
Problem with replication based on materialized view...
Given:
1. Source: S-1
2. Targets: T-1, T-2
3. DB links: from T-1 to S-1, from T-2 to S-1
Required replicate table TBL on S-1 to T-1, T-2 via db links.
On S-1 was created materialized view log with PK on TBL. On T-1, T-2 were created mat.views as "on prebuilt table refresh fast on demand". In case of get "ORA-12034: materialized view log younger than last refresh" or initial load - perform complete refresh. Initial load on T-1 takes about 1 hour, on T-2 - about 12 hours. Refresh is executed via job with minutely interval. If refresh is running then it is not performed.
Problem: after initial load on T-1 performs fast refresh, but on T-2 raised ORA-12034 and complete performs again.
What's wrong?34MCA2K2, Google lover?
I confess perhaps I gave a little info.
View log was created before MV.
It was the first initial load.
No refresh failed.
No DDL.
No purge log.
Not warehouse.
There is no such behavior for MVs on another sites.
P.S. I ask help someone who knows what's wrong or who faced with it or can me follow by usefull link.
P.P.S. It's a pity that there is no button "Useless answer" -
Hi,
On my page I have a select list with submit (--> computes an application item AI_OEFID) and I have a "form with report" based on a view.
In my Region Source I have added a where condition: where "EMPID" = :AI_OEFID.
When I select an employee in the select list the report only shows data of the selected "EMPID", which is fine.
The "null display value" of my LOV is "Choose employee..."
When I select "Choose employee..." the report shows "no data", BUT at that moment I want all my employees shown in the report.
So, I tried the following: I changed my where condition: where "EMPID" IN (:AI_OEFID) and I created another (conditional: when value of LOV = -1) Page Processing computation which computes my application item AI_OEFID with the result of a SQL query: select EMPID from <<VIEW>>.
When I select "Choose employee..." the report shows only my first EMPID.
How can I show all my employees in the report when I select the "null value" of my LOV ?
Thanx,
Frederik.Frederik,
Have a look at this example:
http://htmldb.oracle.com/pls/otn/f?p=31517:99
Denes Kubicek
http://deneskubicek.blogspot.com/
http://htmldb.oracle.com/pls/otn/f?p=31517:1
-------------------------------------------------------------------
Maybe you are looking for
-
My hotmail email is the only email set up (via the connector) in Outlook. Can iCloud work with a hotmail address or do I need another one and if so do I just add another account/email the normal easy way and it will all work or is there something els
-
Why will my embedded youtube videos work in firefox but not IE8
I folowered the instructions on putting youtube videos on a website in dreamweavermx 2004 (copy embeded code, paste in Dreamweaver in code view etc) It just appears as a grey box with the logo AX in the middle when veiwed in IE8 , I thought I had don
-
What's best: "(String) o" or "o.toString()"?
Title sais it all... What's best: "(String) o" or "o.toString()"? And why?
-
Hello In the cancel Custom MIRO document (Through MR8M) , some value goes the Stock a/c where stock is available. Please advice The Original Inv doc COMMISSIONER OF CUSTOMS 5,703,889.00- Customs Clearing 1,115,128.00 Customs Clearing 4,35
-
How do I get photoshop to stop adding hyphens to file names when I save to web