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 PM

    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;

  • 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.
    adsm

    Yes, 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 Muthukannan

    I 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.
    Thanks

    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.

  • 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
    null

    This 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 Ramakrishnan

    Your 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?
    james

    Perhaps, 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, Monica

    It 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
    Preeti

    Thanks 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