Data block based on procedure
While working on a form with a data block based on a procedure, I keep getting error
FRM-40364 The data type of item '%' does not match the corresponding column in the stored procedure.
I have compared the items many times and found no mismatch. When the items are resorted (in both the data block and the procedure) and everything is recompiled, the
"not matching" item referenced sometimes changes, though the types have not been changed. Has anyone solved a similar situation?
Hi,
Yes I did use the wizard,
I agve it the package.proc name for query.
it pulled up the field delivery ID,
Hit finish, because I do not need update/delete/inserts.
the query data source columns and arguments was defaulted correctly.
THe QUERY-PROCEDURE was built by default.
It is giving me an error though: wrong number or types of arguments in call to POPULATE_BLOCK..
DECLARE
bk_data HSM_WSH_DEL_UTIL.DEL_TBL;
BEGIN
hsm_wsh_del_util.do_query(bk_data);
PLSQL_TABLE.POPULATE_BLOCK(bk_data, 'NEW_DELIVERIES');
END;
Similar Messages
-
Help with Data Block Based on Procedure--getting compilation error
I am trying to create a datablock based on a procedure , but im getting errors in compilation:
Errors are :
1) identifier 'HSM_WSH_DEL_UTIL.DEL_TBL' must be declared
2)PL/SQL ERROR 320 at line 7, column 27
the declaration of the type of this expression is incomplete or malformed
ANy Help would be appreciated !
Heres my pkg spec and body for the data block:
CREATE OR REPLACE PACKAGE hsm_wsh_del_util IS
TYPE del_record is record
(delivery_id number);
TYPE del_tbl is table of del_record INDEX BY BINARY_INTEGER;
procedure do_query(p_del IN OUT del_tbl);
END hsm_wsh_del_util ;
CREATE OR REPLACE PACKAGE BODY hsm_wsh_del_util IS
procedure do_query(p_del IN OUT del_tbl)
IS
idx number :=1;
CURSOR DELIVERY IS
SELECT DELIVERY_ID
FROM abc_deliveries;
begin
FOR CUR IN DELIVERY LOOP
p_del(idx).delivery_id :=cur.delivery_id;
idx:= idx+1;
END LOOP;
end do_query;
END hsm_wsh_del_util;
Edited by: 981170 on Mar 13, 2013 1:08 PMHi,
Yes I did use the wizard,
I agve it the package.proc name for query.
it pulled up the field delivery ID,
Hit finish, because I do not need update/delete/inserts.
the query data source columns and arguments was defaulted correctly.
THe QUERY-PROCEDURE was built by default.
It is giving me an error though: wrong number or types of arguments in call to POPULATE_BLOCK..
DECLARE
bk_data HSM_WSH_DEL_UTIL.DEL_TBL;
BEGIN
hsm_wsh_del_util.do_query(bk_data);
PLSQL_TABLE.POPULATE_BLOCK(bk_data, 'NEW_DELIVERIES');
END; -
Data Blocks Based on Stored Procedures
Is it possible to to create a data block based on a stored procedure, and create a dynamic list as a drop down box?
I have a form that runs successfully that has a data block based on a stored procedure. I add my trigger to create and populate the record group. Then in the Property Palette, when I change ITEM TYPE from TEXT ITEM to LIST ITEM, I receive the following runtime error:
FRM-40350: Query caused no records to be retrived.
Note: the tlist/list item runs successfully on a data block based on a table.1) go to the block property to remove the same item column, then re-add the item; Since the property may remember the old text type;
make sure the record value for the list tiem from stored procedure is among the list elements!
Last sort is to do:
2) you may re-create your gui based on the table by setting the list type this time, then set the block property to be based on the stored procedure. -
Forms9i, data block based on stored procedures, refresh on update ?
Hi,
I am using
Forms [32 Bit] Version 9.0.2.9.0 (Production)
Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production
Oracle Toolkit Version 9.0.4.0.23 (Production)
PL/SQL Version 9.0.1.3.1 (Production)
Oracle Procedure Builder V9.0.2.0.7 Build #1022 - Production
PL/SQL Editor (c) WinMain Software (www.winmain.com), v1.0 (Production)
Oracle Query Builder 9.0.2.0.0 - Production
Oracle Virtual Graphics System Version 9.0.1.5.0 (Production)
Oracle Tools GUI Utilities Version 9.0.4.0.9 (Production)
Oracle Multimedia Version 9.0.4.0.9 (Production)
Oracle Tools Integration Version 9.0.2.0.0 (Production)
Oracle Tools Common Area Version 9.0.1.0.0
Oracle CORE 9.0.1.2.0 ProductionI have a module based on stored procedures. I have defined query, lock and update procedure. All of them are working as they should, I mean that when looking at the input and output from these procedures I don't see anything blatantly wrong.
Now, when I update a table field in the form and call the update stored procedure, this procedure takes the updated values in considerations, updates some more fields, and remove some records.
It is working as it should, except for two details :
1- I don't see the values updated by the procedure in the Form;
2- even though some records were removed from the table by the procedure, I still see all my records.
Is there a way to display the returned table?
And, is there any documentation about data block based on stored procedures, what are the required signatures and limitations of those stored procedures, what a lock procedure is supposed to do (mine does 'null;' ...), how to map a collection type defined in Oracle to a Form data block ? Any link will be appreciated, I have found half a dozen page vaguely detailing this on Google, but nothing that can compare to a usual Oracle manual. Maybe I have missed something.
Thank you for your help.
adsmYes, I was hoping to use these procedures to map the collection type returned to the database to the block data. I guess I was wrong. Except for the initial query and reading some other information from the database, I don't have to use these procedures as I do not write anything to it.
Thank you for your help, I will go on from there.
So, it means that I will have to iterate through my collection inside Forms and manipulate my data row by row. Or, is there a way to pass an Oracle collection type between the database and the Forms client and have it displayed without having to iterate through the rows and mapping each field?
adsm -
Data block based on stored procedure with input arguments
Hi,
I am able to create a data block based on stored procedure.
but I want that procedure to take input arguments as well and I am facing the issue while setting the value for that input arguments from another block item.
Please somebody help, How to set the value for input argument from another control block- item?.(Note :Data block is based on the stored procedure)
Thanks in Advance,
Anandan MuthukannanI did exactly the same way you mentioned.
But while building the form, The call to the procedure in 'QUERY-PROCEDURE' trigger has been modified like this way
procedure_name(qp_data,':BLOCK.ITEM');
so in procedure i am getting the value as ':BLOCK.ITEM' not the expected value. -
Need to create a block based on procedure
We can create a block based on procedure...but whats the need to do so...please can anybody explain.
There are several recent posts on the topic with a lot of good help & documentation.
The Metalink note: 66887.1
Re: Form on a procedure
If you can't access Metalink, search here on that note. Someone posted the full text a couple days ago.
This is also very good reference:
Block based on procedure
Essentially, you have a procedure, returning a table-of-records type variable, called by the block "Query Data Source..." properties.
Name = procedure name
Arguments = procedure parameters (IN parameter(s) Value is :block.item)
Source Columns = the record type columns for your table-of-records
Datatypes & sizes must match all around.
Start very simple & get it to work first, then expand.
You must follow the documentation very carefully. If it doesn't work at first, go through everything to verify. Also, read the Tip & Issues at the end of the Metalink note.
Have fun. It works awsome once you get the hang of it. -
Record Who information for a block based on procedure
Hi All,
I have a block whose query data source type property is set to procedure and query data source name is a procedure. When I hit Ctrl F11 on this block it shows me all the records. When I see the record who information , I see all the record who information except the Table Name. I understand that the table name is not coming as the query data source name is a procedure for this block. Is there a way to dynamically set this query data source name to a table or a view while still retaining the procedure based functionality. I tried set_block_property for this property but form won't allow.
ThanksThere are several recent posts on the topic with a lot of good help & documentation.
The Metalink note: 66887.1
Re: Form on a procedure
If you can't access Metalink, search here on that note. Someone posted the full text a couple days ago.
This is also very good reference:
Block based on procedure
Essentially, you have a procedure, returning a table-of-records type variable, called by the block "Query Data Source..." properties.
Name = procedure name
Arguments = procedure parameters (IN parameter(s) Value is :block.item)
Source Columns = the record type columns for your table-of-records
Datatypes & sizes must match all around.
Start very simple & get it to work first, then expand.
You must follow the documentation very carefully. If it doesn't work at first, go through everything to verify. Also, read the Tip & Issues at the end of the Metalink note.
Have fun. It works awsome once you get the hang of it. -
Does adding a field to a table affect a data block based on the table?
If I make a change to a table like adding a field does it affect data data blocks based on the table?
The other place I have seen where adding a new column to a table causes problems is when a programmer codes: Select * from table.
If that is coded in a form, the form will need to be recompiled before it will work properly. -
Forms Data-Block based on stored procedures - REF CURSOR feature NOT FUNCTIONING
This topic is related to another topic in this forum titled "FORMS HOW TO SET QUERY SOURCE ARGUMENTS??" I posted my message there as well. I am posting as a NEW TOPIC so that it catches the attention of Oracle Support.
I built a data form based on a stored procedure and REF CURSOR IN OUT parameter.
My procedure takes a IN parameter to fill in the criteria for the OPEN <cursor_variable> select ... where ... statement.
In the Value setting of the Query source Arguments , I set the VALUE to ":BLOCK_NAME.ITEM_NAME" at design time to supply the input value to the procedure. this works to the extent of making available the form item value to the stored procedure parameter. I verified this by doing an insert into some debug table , of the incoming parameter value inside my stored procedure.
The cursor gets opened properly into the REF cursor variable. I verified this by fetching a record into a local variable and inserting the value into a debug table again in the stored procedure.
(I took care to close and re-open the REF cursor variable again - so that the front-end can continue to fetch it from the first record. )
***** PROBLEM **************
But the front end forms runtime is giving me a FRM-40301 - query returned no records even though the REF cursor is returned properly opened.
Did anybody else face the same problem ??
Please post what you found.
Thanks,
Shankaran
nullThis topic is discussed at length in another thread "How Set Value For Query DataSource Arguments?"
But I am posting the findings here as well.
THIS TOPIC IS CLOSED.
My Bad. The problem Cause : I did not include all columns in the
cursor rowtype in the Data-block. In the wizard for the data block , I selected ONLY the columns that I needed. But I was doing a Select * from <my_table> in my open cursor <Cursor-Variable> .... The <Cursor Variable>
itself was declared <my_table>%rowtype
FIX : The Data Block structure (columns included as items) should match the cursor record Structure. One may or may not
display all the columns in the LAYOUT though.
But I don't understand why it gives such a misleading message like FRM-40301 Query retrieved no records. Oracle Team fix it.
Hope this helps people who face the same problem.
Thanks, -
Problem updating data block based on a view
Hi,
I have a data block that is based on a fairly complex view, which I want to make update-able. The default Forms behavior, of course, is to not allow this.
In an attempt to get around this, I defined an 'ON-LOCK' trigger, where I specified a single statement 'LOCK_RECORD;'. I also defined an ON-UPDATE trigger that will later call some stored PL/SQL procedures to effect the actual update (using INSTEAD-OF triggers and such). For now, I just display a message saying 'updation not currently supported'.
However, a problem occurs when I make a change to an item in the data block, don't attempt to save it, yet try to navigate to the next record. The form simply hangs and the only thing I can do is kill the process.
I'm deploying this form as within Oracle Apps 11i. I suspect this has something to do with the lock record but don't know how to get around this.
Does any one have any suggestions?
Thanks,
Niranjan RamakrishnanYour lock will be removed whenever the forms does a commit or rollback. In 'normal' forms processing the on-update trigger will fire as part of the commit form processing, which also includes a database commit which will remove any locks that have been taken out. Should the user clear the form a database rollback will be performed which will also remove any locks. You should not need to do any explicit removal of locks yourself.
I would not recommend not having any kind of lock processing, as Sudha says, as this could easily lead to changes to record's being lost. As long as the locking of table(s) is always done in the same order deadlocking should not occur.
You may make want to make the locking process a SELECT ... FOR UPDATE NOWAIT so if the record is already locked the user is informed and can try again later, rather than an unknown wait until the record becomes available. -
Updating record in a data block based on view in oracle forms
hi all ,
We have two data blocks in our custom oracle form.The first data block is for search criteria provided with buttons 'GO' and 'ADD ROW' and the second data block is based on a view that fetches record when user clicks on GO based on the the criteria specified in the above block. The Below block contains one SAVE button too.
We have a requirement when GO button is pressed and corresponding records are shown in the below block, user should be able to edit the record. Want to know how to make it editable?
Help appreciated....!!!Your view is based on how many tables and does it include all NOT NULL fields from all tables?
-
Recommended best practice to fetch detail block based on procedure
HI
I am creating a detail block (Dept)based on procedure which will be populated from the value from master block 'Emp'.
For example,
Detail block 'Dept' will be populated by calling procedure populate_detail(:emp.empno in number,dept.deptno out number) .
But what are the triggers I need to call to populate detail block and at which level?
I was thinking to call a WHEN-MOUSE-DOUBLECLICK on master block 'Emp' level to populate the detail block 'Dept' by calling the procedure and passing emp.empno as the parameter whenever the user moves from one master record to another.
Please advise.
Thanks in advance.Download the forms 6i examples CD from the OTN website
-
Data block and storage procedure
Hi,
I have problem with form that is build on storage procedure.
When I compile form i get error:
Compilation error on DELETE-PROCEDURE trigger on BLOCK22 data block:
ERROR PL/SQL 306 in line 7, column 1
wrong number or types of arguments in call to 'POPULATE_TABLE'
ERROR PL/SQL 0 in line 7, kcolumn 1
Statement ignored
Table:
CREATE TABLE LOKALIZACJE
( ID_LOK INTEGER,
ADRES VARCHAR2(40),
OPIS VARCHAR2(80));
Package:
create or replace package pkg_lok_1 is
type lok_rec is record
(id_lok lokalizacje.id_lok%type,
adres lokalizacje.adres%type,
opis lokalizacje.opis%type);
TYPE return_cur IS REF CURSOR RETURN lokalizacje%ROWTYPE;
TYPE return_tab IS TABLE OF lok_rec;
PROCEDURE wyswietl (param_return_rec IN OUT return_cur);
PROCEDURE usun (p_emp_table IN OUT return_tab);
END pkg_lok_1;
CREATE OR REPLACE PACKAGE BODY pkg_lok_1 AS
PROCEDURE wyswietl (param_return_rec IN OUT return_cur) IS
BEGIN
OPEN param_return_rec FOR
SELECT * FROM lokalizacje;
END wyswietl;
PROCEDURE usun (p_emp_table IN OUT return_tab) is
BEGIN
delete lokalizacje
where id_lok=p_emp_table(0).id_lok;
END usun;
END pkg_lok_1;
end trigger delete-procedure
DECLARE
bk_data PKG_LOK_1.RETURN_TAB;
BEGIN
PLSQL_TABLE.POPULATE_TABLE(bk_data, 'BLOCK22', PLSQL_TABLE.DELETE_RECORDS);
PKG_LOK_1.USUN(bk_data);
END;
Procedure wyswietl work fine but form doesn't comiple when I use procedure usun.
Where is problem? Colud someone help me?
jamesPerhaps, you block have a non database items but they is declared as database.
-
Block based on procedure - trapping errors
Hi,
I have created a form with a block based on a procedure but when there is an error in the procedure it is not being trapped. I have raise_application_error in the execption but the form does not pick this up
Can anyone help me on this. I am using Forms 5
thanks, MonicaIt would be very difficutlt to send all the necessary pieces but there is a very good discussion of it in the "Advanced Forms and Reports" book from Oracle Press(Chapter 4).
-
Query on Data Block based on View
Hi,
I am new to forms and am trying to modify an existing form which currently works in the following way :
The same form is used for insert/updates/queries.
The data block is based on a table and a post query trigger is written which updates the other text items on the canvas(which come from different tables) based on the values returned by the data block. Since the query functionality is based only on the table, you cannot query on the other items that are on the canvas. I need to make the query work on the other items that come from different tables.
I created a view which joins all the tables but when I query although it returns the right record I get an error message " Cannot insert into or update view"
I'm not sure what the best way to resolve this is ?
Any suggestions ?
Thanks
PreetiThanks for the replies.
I created an updateable view and an instead of trigger. The Form is now queryable on all fields and the insert to the table works beautifully.
However, now I'm getting an error on Update. Updating any column on the form results in a
ORA-01733: virtual column not allowed here
FRM-40501: ORACLE error: unable to reserve record for update or delete.
The code for the view is :
select a.*,
B.vendor_name as Supplier_name,
'PRE' AS TO_OWNER,
C.vendor_site_code as supplier_site,
ARCH.vendor_name AS Architect,
p.segment1 as Project,
ph.segment1 as PO_number,
decode(a.interface_status,'I','Interfaced', 'U', 'UnInterfaced',
'P', 'Partial',null) Interface_display_status,
decode(a.approval_status,'A','Approved', 'P', 'Partial',
'R', 'Rejected', 'U','Unapproved',null) Approval_display_status
from idc_aia_g702 a, po_vendors b,
po_vendor_sites_all C,
PO_VENDORS ARCH,
pa_projects_all p,
po_headers_all ph
where b.vendor_id = a.vendor_id
AND A.vendor_site_Id (+) = C.vendor_site_id
AND A.VIA_ARCHITECT_VENDOR_ID = ARCH.VENDOR_ID (+)
and a.project_id = p.project_id
and a.po_header_id = ph.po_header_id;
I know I have to do something on either the data block property palette or the individual item property palette and clicking on any field within the form in order to update it results in the error mentioned above.
Shd I have all the item props as Query Only set to Yes ? or the ones for Table A as Query Only set to N and the other table columns as Y ?
Thanks
Preeti
Maybe you are looking for
-
How do i sync my iPod Touch to iTunes?
My ipod touch is disabled and it says to connect to itunes,so i connect the ipod to the computer but it wont sync,i dont know if its cause i dont have itunes version 10.5 or something else,please help,i havent been able to do things on my ipod for a
-
Transfer Memos from Pallm Desktop to Palm Pre 2 (Verizon)
Any ideas how I can get my memos from my Plam Desktop to my new Pre 2. I own Companion Synchronize, but I don't believe it supports the phone yet. Thanks. Post relates to: Pre 2 p102eww (Verizon) This question was solved. View Solution.
-
Export all Channels to Excel without a dialog or a stp file
Hello, i try to write a vbs script that export all channels that exists to excel without a dialog. By the reson that i don´t know exactly how many channels are generated while the measurement i can´t use a stp file. I tried to set all variables but e
-
Sync starts iPhoto now as well as iTunes AFTER Camera Raw 2.3 Update
On November 5, 2008, I let software update install Apple's "Digital Camera Raw Compatibility Update version 2.3 (4.3MB)". Now, plugging my iPod Touch (1G) into USB port on my MacBook Pro laptop causes iPhoto to start (and eventually the expected iTun
-
how can we re-trieve? have tried to re-open and customise but keep getting the above. using FCP 7.0.3