VARRAYS in FORMS 9i

I need to access columns defined in an Oracle 9i database as VARRAY in forms 9i. How do I go about this? Any help would be appreciated as the help was no help.
Thanks in advance,
Joe

Check out the online help for Forms under Oracle9 Datatypes, plsql and forms -> about oracle9 datatypes
"Not all Oracle9 features are currently supported across this release. The major unsupported features are: Collection types (nested tables and varying arrays, or varrays) ..."

Similar Messages

  • Using nested tables and varrays in Forms/Reports6i

    Hi! Could anybody give practical examples of applications based on nested tables and varrays in Forms/Reports6i.
    The possible schema of building user interface and so on.
    Thank you.
    [email protected]

    Hi,
    Varrays and nested tables are not supported within Forms6i and Reports6i. This means tare is no way to use it.
    Frank

  • Forms 9i and spatial objects

    Hi there,
    I was wondering if there is some smart thinkers out there that could solve or at least get a work around for a bug we have discovered in Forms 9i
    When a reference is made to a table that contains a object column (ie spatial, blob etc) through pl/sql code, the following error occurs. eg when you select count(*) from a table with a spatial (SDO_GEOM) column.
    Error 999 : implementation restriction (may be temporary) ADT or schema level collection not supported at client side with non-OCI mode.
    This is due to a tighting in forms 9i when referencing such tables where 6i only brought up the error is you directly reference the object column.
    Oracle has suggested a work around, or really a recoding of our forms (over 1000 in production) such that is to
    move the code to the server and just call it from forms. If you need to pass the objects then the client will need to break them down and pass the scalar attributes, as mentioned in bug 2502240.
    We are at a loss as to the solution as this one is unworkable, if anyone can make suggestions that would be great.
    Regards,
    Stuart Ross

    Is there any suggested solution on this issue.
    I'm trying to call a function which returns a VARRAY in Forms.
    But getting the above mentioned error.
    Thanks
    Bhavani

  • Using REST-based data in SolMan

    Hi,
    In the [Apache Project ESME|http://incubator.apache.org/esme], we have made JMX-based data available via a REST interface. This is partially related to restrictions that are present in many cloud-based environments.  We are looking to see how existing enterprise monitoring systems might be able to use this data.
    Does anyone know if it is possible to use REST-based data in SolutionManager?
    Thanks.
    D.

    Hi Alfred
    I tried to use nested tables and varrays in forms several times but also wasn't able to do so. The problem is that on the client side there are not all the PL/SQL 8 features implemented. Look what the manual says:
    "Not all Oracle8 features are currently supported across this release.
    The major unsupported features are:
    - Collection types (nested tables and
    varying arrays, or varrays)
    - Stored procedures that return object
    values
    - Scalar datatypes NCHAR and NVARCHAR2
    You should also be aware that, although this release does support PL/SQL 8, client-side PL/SQL 8 does not yet fully support all the features in the Oracle8 Server. (Server-side PL/SQL 8 support is complete.)"
    So you'll have to wait for the next release or a patch I guess. Please correct me if I am mistake.
    Hope this was kind of useful
    Nik
    null

  • Creating and displaying Varrays in Apex 4.1

    Hi,
    I am creating quite a sophisticated database, which has to support relations between different tables. In order to implement that, I've decided to use user-defined datatype - a varray which consists of 100 integers (and only of that) that will contain ID's to different rows in different tables. Since it is a user-defined datatype I have problems with using it in Application Express :)
    First question: Is there any way to make this simple datatype 'readable' for Apex? In each application I create it shows that it is 'an unsupported datatype'. Maybe I should define something more than just varray construction - the way Apex should read and edit it etc ?
    Second question: How can I implement a function that will read the IDs in the varray and transform them into names to which that IDs correspond? I would like an application to show full name of an organization (ex. "ABC Corporation") instead of its ID. I tried to put some part of code that takes up the name of an organisation in a row with given ID into +"Source"+ form in the +"Edit page item"+, however Apex doesn't seem to get the fact that the data is in different table. Any ideas? :)
    I will be grateful for any help since it is an urgent case :]

    KamilGorski wrote:
    I would happily do that if only I had more time to study SQL and learn it properly :) Unfortunately, our start-up company has no time and money at the moment to allow me to do so.Then isn't using technologies that no one knows rather a strange decision?
    But coming back to your solution - it still works only if user inputs only one product quality. Let's say that user has chosen 3 qualities and the 'SELECTED_QUALITIES' collection looks like that:
    n001 = 1,
    n002 = 3,
    n003 = 5
    And since the SELECT query you have created compares pq.quality_id only to n001, it returns all the products that have the quality no 1 - not all the products that have all three selected qualities - 1, 3 and 5. Of course, we can change the 'EXISTS' condition and add more 'OR' conditions like that:
    where pq.quality_id = q.n001
    or pq.quality_id = q.n002
    or pq.quality_id = q.n003But it has few flaws - first we assume that we know the number of qualities user has selected - 3 (and we don't know that), You've misunderstood. SQL is row based. To handle multiple values, we create more rows, not additional columns. In your preferred terms, the result of any query is an <i>m</i>&times;<i>n</i> array of columns and rows, where the number of columns <i>m</i> is fixed, and the number of rows <i>n</i> varies according to the query predicates.
    It is not necessary to know the number of selected qualities, simply create a row in the collection for each selected quality to give a set of selected qualities.
    The SELECTED_QUALITIES collection should look like:
    N001
       1
       3
       5
    secondly the query will return all the products that have one of the three selected qualities (and we want products that have all three qualities). That wasn't really clear from the information previously given, but it's certainly possible. With <tt>product_qualities(product_id, quality_id)</tt> as a primary/unique key, and with no duplicates in the selected qualities, a solution is the set of all products with the selected qualities, where the number of qualities matched for each product equals the number of qualities selected, as in this example:
    SQL> create table products (
      2      product_id    integer       primary key
      3    , product_name  varchar2(30)  not null);
    Table created.
    SQL> create table qualities (
      2      quality_id    integer       primary key
      3    , quality_name  varchar2(30)  not null);
    Table created.
    SQL> create table product_qualities (
      2        product_id  integer   not null references products
      3      , quality_id  integer   not null references qualities,
      4      constraint product_qualities_pk primary key (
      5            product_id
      6          , quality_id))
      7    organization index;
    Table created.
    SQL> create index product_qualities_ix2 on product_qualities (
      2      quality_id
      3    , product_id);
    Index created.
    SQL> insert all
      2    into products (product_id, product_name) values (1, 'widget')
      3    into products (product_id, product_name) values (2, 'thingummy')
      4    into products (product_id, product_name) values (3, 'whatsit')
      5    into products (product_id, product_name) values (4, 'gizmo')
      6    into products (product_id, product_name) values (5, 'gadget')
      7    into products (product_id, product_name) values (6, 'contraption')
      8  select * from dual;
    6 rows created.
    SQL> insert all
      2    into qualities (quality_id, quality_name) values (1, 'green')
      3    into qualities (quality_id, quality_name) values (2, 'silver')
      4    into qualities (quality_id, quality_name) values (3, 'shiny')
      5    into qualities (quality_id, quality_name) values (4, 'furry')
      6    into qualities (quality_id, quality_name) values (5, 'digital')
      7    into qualities (quality_id, quality_name) values (6, 'hd')
      8    into qualities (quality_id, quality_name) values (7, 'wireless')
      9  select * from dual;
    7 rows created.
    SQL> insert all
      2    into product_qualities (product_id, quality_id) values (1, 1)
      3    into product_qualities (product_id, quality_id) values (1, 3)
      4    into product_qualities (product_id, quality_id) values (2, 2)
      5    into product_qualities (product_id, quality_id) values (2, 4)
      6    into product_qualities (product_id, quality_id) values (3, 1)
      7    into product_qualities (product_id, quality_id) values (3, 3)
      8    into product_qualities (product_id, quality_id) values (3, 5)
      9    into product_qualities (product_id, quality_id) values (4, 2)
    10    into product_qualities (product_id, quality_id) values (4, 4)
    11    into product_qualities (product_id, quality_id) values (4, 6)
    12    into product_qualities (product_id, quality_id) values (5, 2)
    13    into product_qualities (product_id, quality_id) values (5, 3)
    14    into product_qualities (product_id, quality_id) values (5, 5)
    15    into product_qualities (product_id, quality_id) values (6, 1)
    16    into product_qualities (product_id, quality_id) values (6, 3)
    17    into product_qualities (product_id, quality_id) values (6, 5)
    18    into product_qualities (product_id, quality_id) values (6, 7)
    19  select * from dual;
    17 rows created.
    SQL> commit;
    Commit complete.For the purposes of creating a quick and simple example outside of APEX, I'm using a temporary table instead of the SELECTED_QUALITIES APEX collection. For various reasons collections work better in APEX than GTTs and are the preferred approach for temporary storage.
    SQL> create global temporary table selected_qualities (
      2    n001 integer)
      3  on commit delete rows;
    Table created.With one quality selected, we get all the products having that quality:
    SQL> insert into selected_qualities (n001) values (1);
    1 row created.
    SQL> insert into selected_qualities (n001) values (1);
    1 row created.
    SQL> select
      2            p.product_id
      3          , p.product_name
      4  from
      5            products p
      6           join product_qualities pq
      7             on p.product_id = pq.product_id
      8           join selected_qualities sq
      9             on pq.quality_id = sq.n001
    10  group by
    11            p.product_id
    12          , p.product_name
    13  having
    14             count(*) = (select count(*) from selected_qualities);
    PRODUCT_ID PRODUCT_NAME
          1 widget
          6 contraption
          3 whatsitThese products all have the next quality added, so continue to be returned:
    SQL> insert into selected_qualities (n001) values (3);
    1 row created.
    SQL> select
      2            p.product_id
      3          , p.product_name
      4  from
      5            products p
      6           join product_qualities pq
      7             on p.product_id = pq.product_id
      8           join selected_qualities sq
      9             on pq.quality_id = sq.n001
    10  group by
    11            p.product_id
    12          , p.product_name
    13  having
    14             count(*) = (select count(*) from selected_qualities);
    PRODUCT_ID PRODUCT_NAME
          1 widget
          6 contraption
          3 whatsitThen as additional qualities are selected, the result set is progressively reduced:
    SQL> insert into selected_qualities (n001) values (5);
    1 row created.
    SQL> select
      2            p.product_id
      3          , p.product_name
      4  from
      5            products p
      6           join product_qualities pq
      7             on p.product_id = pq.product_id
      8           join selected_qualities sq
      9             on pq.quality_id = sq.n001
    10  group by
    11            p.product_id
    12          , p.product_name
    13  having
    14             count(*) = (select count(*) from selected_qualities);
    PRODUCT_ID PRODUCT_NAME
          6 contraption
          3 whatsit
    SQL> insert into selected_qualities (n001) values (7);
    1 row created.
    SQL> select
      2            p.product_id
      3          , p.product_name
      4  from
      5            products p
      6           join product_qualities pq
      7             on p.product_id = pq.product_id
      8           join selected_qualities sq
      9             on pq.quality_id = sq.n001
    10  group by
    11            p.product_id
    12          , p.product_name
    13  having
    14             count(*) = (select count(*) from selected_qualities);
    PRODUCT_ID PRODUCT_NAME
          6 contraption

  • VArray in Database Adapter?

    Hi,
    I unable to create partnerlink of procedure having composite type vArray using database/application adapters and getting the following error while creating the same for procedure1. Version using 10.1.2.0.2.
    "Parameter output is of type arrayOfNumber which is either not supported or not an implemented datatype."
    TYPE arrayOfNumber IS VARRAY(4) of NUMBER;
    PROCEDURE procedure1 (input IN NUMBER, output OUT arrayOfNumber);
    Any thing doing wrong, if not then any alternate.
    thx,
    Janit

    Just to clarify, by "root-level" I mean outside of a package definition. Thus
    SQL> create type vArray as varray(10) of number;
    Instead of
    SQL> create package pkg as
    type vArray is varray(10) of number;
    end;The former type definition works as the type of a parameter. The latter does not.

  • Using DDE with Oracle Forms for uploading Excel data

    Hi There,
    I have used DDE in Forms to upload data from Excel.
    The code which I have implemented is as follows:
    DECLARE
    iApplication pls_integer;
    iConv pls_integer;
    v2Buffer varchar2(100);
    v2text varchar2(100);
    nLength number;
    nTransactionId number;
    /* these varrays are defined in a package specification*/
    vExcelProduct p_upload_functions.prd_no:=p_upload_functions.prd_no('1');
    vExcelVpc p_upload_functions.vpc:=p_upload_functions.vpc('1');
    BEGIN
    /*Open an DDE Server application*/
    iApplication:= DDE.App_Begin('C:/excel.exe ‘||v2fileName,DDE.App_Mode_Minimized);
    iConv:=DDE.Initiate('EXCEL',v2filename);
    BEGIN
    /* first row of the sheet used for title . So loop is started from 2*/
    /* Reading a row*/
    FOR I IN 2..10000
    LOOP
    /* Reading columns of a particular row*/
         FOR J IN 1..n / * n be the number of columns in excel sheet */
         LOOP
    /* generate the cell no of excel sheet from where data will
    be fetched- R is used for row no and C is foe column no*/
         v2text:='R'||I||'C'||J||':'||'R'||I||'C'||J;
    /* Store the value in variable */
    dde.request(iConv,v2text,v2Buffer,dde.cf_text,1000);
    /*Stores values in the varrays for a row*/
    IF j=1 THEN
    /* for first column*/
    nLength:=length(v2Buffer);
    vExcelOrg(I-1):=To_Number(substr(v2Buffer,1,nLength-2));
         /* for second column */
    ELSIF j=2 THEN
    nLength:=length(v2Buffer);
    vExcelProduct(I-1):=substr(v2Buffer,1,nLength-2);
    END IF;
    END LOOP;
    /*Exit the loop when it encounters an empty row*/
    IF vExcelProduct(I-1) IS NULL AND vExcelOrg(I-1) IS NULL THEN
    EXIT;
    END IF;
    /* Otherwise extending the varray*/
    vExcelProduct.extend;
    vExcelOrg.extend;
    /* Reading the next row*/
    END LOOP;
    /* Now close the DDE application */
    DDE.app_end(iApplication);
    DDE.terminate(iConv);
    EXCEPTION
         WHEN Others THEN
         DDE.app_end(iApplication);
    DDE.terminate(iConv);
    RAISE Form_Trigger_Failure;
    END;
    I am facing a problem, I will appreciate if you can give some insights to help.
    We have been having problem logging in to application when there are a number of EXCEL processes running (17-18) on the server. Users that have already logged in have no problem, but new login will get "FRM-92101 There was a failure in the Forms Server during startup". The Forms Server itself is running fine. After we killed a few EXCEL processes, new users will be able to login.
    Thanks and regards,
    Mandeep

    this is a trial method and right now i am trying to read only the first cell of the excel sheet and return that value and show it in the UI when the user presses the button but this code is not returning any value.
    METHOD read_excel.
      INCLUDE ole2incl.
      DATA: filename(128) TYPE c,
                excel TYPE ole2_object,
                cell TYPE ole2_object,
                workbook TYPE ole2_object,
               pfile TYPE localfile VALUE
               'C:\Documents and Settings\I047323\Desktop\new.xls',
                name TYPE string.
      CREATE OBJECT excel 'EXCEL.APPLICATION'.
      SET PROPERTY OF excel 'VISIBLE' = 0.
      CALL METHOD OF excel 'WORKBOOKS' = workbook.
      CALL METHOD OF workbook 'OPEN'
        EXPORTING  #1       = pfile.
        CALL METHOD OF excel  'CELLS' = cell
          EXPORTING
            #1      = 1
            #2      = 1
        GET PROPERTY OF cell 'VALUE' = value.
      CALL METHOD OF workbook 'SAVE'.
      CALL METHOD OF workbook 'CLOSE'.
      CALL METHOD OF excel 'QUIT'.
      FREE OBJECT excel.
    ENDMETHOD.
    Edited by: neelima v on Jan 14, 2008 4:06 PM

  • Loading VARRAY's with SQL loader, direct path in 9i?

    Isn't it possible to load VARRAY's with SQLloader and direct path in a Oracle 9i database?
    /Magnus Hornstrom
    mailto:[email protected]

    Daniel,
    I appreciate your response alot.
    Now a follow on. You say that SQL*Loader is the fastest way to get data into Oracle Spatial even though the conventional path. How does SQL*Loader do this? Doesn't it use OCI?
    I just can't help but think that coverting my data to SQL*Loader format, and then having it parse it and send it to the database in some form must be slower than me just sending whatever SQL Loader sends to the DB myself using OCI. Am I missing something?
    The SQL Loader documentation seems to suggest that SQL*Loader just turns the input into alot of INSERT stateemnts. If so, can't I just do this?
    My performance with OCI and INSERT statements isn't very good, but I believe I am doing one transaction per insert. Might I be as well off to concentrate on fine tuning my OCI based code using INSERTs?
    I will actually do some time tests myself, but I would appreciate your opinion.
    Once again thanks for the great info you have provided.

  • How to use nested tables object in oracle form

    Hello forum
    How all r u ..
    i need ur help guys, pls help me out...
    i m using an object oriented approach to design my database by using nested tables and
    varrays. it is quite done successfully.
    but the problem is when i m trying to use that object of nested table into the datablock of the form it is not been added to item list of that block.
    so what is the proper way to use these type of objects to the form.
    all ideas are welcomed and vry much required.
    pls give example if possible so easy to understand or have any demo form related to above case then pls post me to my id i.e [email protected]
    thank u all and expecting some expert solutions

    Hello Francois Degrelle...
    How r u doing ... i have searched the forum abt the above mentioned topic then i found that u have some demo form which will help out to explain the functionality of the nested table in forms ..
    will u pls me that form to my i.e [email protected] pls mail all the detail u have regarding using nested tables to forms and reports
    lots of thanks to u n advance.

  • X-file with db function returning a rowtype to forms. Positional binding?

    How to explain this ...
    First things first:
    Forms [32 bits] Versión 11.1.2.1.0 (Producción)
    Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
    Now the db testcase:
    I've got two schemas, quite similar, SCHEMA_A and SCHEMA_B
    Imagine the same table: mytable (colx varchar2, coly varchar2, colz varchar2) in both schemas,
    BUT in SCHEMA_B the order of the cols is not the same. In schema B it is
    mytable (colx, colz, coly).
    (Yeah, I know, I know, but leave it for the sake of the x-file)
    Let's suppose the table has only one row, and that I have a db function in both schemas such as this:
    function get_myrow return mytable%rowtype is
    l_row mytable%rowtype;
    begin
    select * into l_row from mytable;
    return l_row;
    end;
    Here, the forms testcase:
    I make a form, where I show the value in an item
    For example:
    :item := get_myrow().coly
    And now, the x-file:
    If I compile the form in the builder, connected as SCHEMA_A, when I run it in SCHEMA_B, the item shows colz value!!
    It is as if forms is doing some kind of positional binding in the fmx. Instead of asking for coly column to the record type variable, it shows "the second value" of the record type.
    Now, I will have to find this disordered tables and reorder them (dbms_redefinition? hints are welcome).
    Any thougts? Bug as feature?

    About the "select * is problematic" , I agree 99% of the times. But this time, as I'm storing the values in the rowtype variable, is the way to ensure that the estructure and the values fit.
    You said:
    What happens when your table changes (such as a new column) but your function hasn't been updated?  Your Function will produce an error because it can't handle the additional column.
    And it's just the opposite. My function will recompile itself, as the rowtype is perfectly capable of storing the values in the new rowtype.
    In fact, it's the MLBrown function the one that would produce an error if I change columns in the table, and that's the best case scenario, as the function could be lucky and work storing the values in the wrong places, leaving the bug hidden.
    Anyway, I understand this "select *" issue is arguable, so forget about the select * , I'll take it out of this thread with a more simple testcase:
    create table mytable (
    colx varchar2(10),
    coly varchar2(10),
    colz varchar2(10));
    Consider this "select free" version of the function:
    function get_myrow return mytable%rowtype is
      l_row mytable%rowtype;
    begin
    l_row.colx := 'a';
    l_row.coly := 'b';
    l_row.colz := 'c';
      return l_row;
    end;
    Forget also about schema_a and schema_b, I can reproduce it with just one schema!!!
    Now I build a form with just a button. When- button-pressed:
    message (get_myrow.coly);
    I compile and run it, and I get a b value. ok.
    Now I drop the table and recreate but like this:
    create table mytable (
    colx varchar2(10),
    colz varchar2(10),
    coly varchar2(10));
    Now run the form (without compiling) and see how the message shown is c !!!
    The result is different, depending on how whas the rowtype structure when I compiled the fmb.
    Are you indeed telling that is acceptable an escenary where I ask for get_myrow().coly value and I get colz value instead?
    How's that possible? Because somebody shortcutted in the fmx compiling process, and converted my call for named coly value to a call to "the second column of the record variable".
    I'm not asking for a numbered position , I'm asking for coly value, not for "the second column of the rowtype variable the day I compiled the form". Had I want a possitional binding, I'd use a frikkin varray.

  • Object tables/ varrays

    how to enter data values in to object table/varrys in forms 6i and reports.
    it is not taking in defalult form creation.
    i am not able to appreciate the use of nested tables and varrays without the above. kindly give me a solution with suitable examples
    Regards

    Fernando -- At this time the best way to work with the object-relational features is with BMP. Some of those capabilities can be used with TopLink as well. Lastly, we are looking at how best to leverage these in the future.
    Thanks -- Jeff Schafer

  • Varray in Form6i

    Hello
    I have created the following type in Oracle 8i...
    create or replace type cno as varray(5) of number;
    and used it in a table as...
    create table sum_of(name varchar2(30),get_no cno);
    How can i use it in Forms 6i?
    Regards
    Laila

    I think you can't use it directly. You have to write a view resolving the varray
    and instead-of-triggers to insert/update the data.

  • Varrays

    Hi all,
    I am trying to create a varray type, however it gives me the following error :
    ORA-00439: feature not enabled: Objects
    Our Oracle release version is as follows:
    Oracle8 Enterprise Edition Release 8.0.5.1.0 - Production
    PL/SQL Release 8.0.5.1.0 - Production
    Can somebody tell as to why I am unable to create a Varray type??
    Thanks,
    Jyoti.

    Dear Robin,
    I think forms 6i does not support VARRAYS. But I'm also not sure.
    Bhavesh
    null

  • Block based on table with varray column.

    Hello Everyone,
    Please guide me how to build a block on a table which has column of varray type.
    Any example....
    DB version: Release 9.2.0.1.0
    Forms version: Forms [32 Bit] Version 10.1.2.0.2
    Edited by: user4591095 on Feb 26, 2010 9:29 AM

    Hello,
    <p>Look at this article. Especially the chapter 2.3.3
    Francois

  • How to use advanced PL/SQL concepts in oracle forms/reports

    Hi all,
    Can any one suggest me how to use the advanced PL/SQL Concepts(nested tables,PAA,Varrays,Objects...) in Oracle forms.
    Actually i Created a Table having column of Varray datatype. now i want to create a item in oracle forms on this field. can any one suggest me the way to do this.
    Thanks,
    Kumar

    Hello,
    Have a look at this one:
    http://sheikyerbouti.developpez.com/tutoforms10g/tutoforms10g.htm
    particularly the chapter about block that contain a collection (2.3.3). The sample is built around a nested table but you have the idea to adapt it to work with a varray.
    Kind regards,
    Alex
    If someone's answer is helpful or correct please mark it accordingly.

Maybe you are looking for

  • Why does File Explorer Seem to Wait for End-to-End Confirmation?

    For quite a few versions now, when copying large blocks of files from place to place it seems like Explorer adds an arbitrary delay or maybe waits for confirmation internally that every file has been actually written to the disk before continuing. On

  • How to increase the length of Hyperion Planning object_name

    In order to store a long member alias in outline, i modified the definition of field OBJECT_NAME and OLD_NAME in table HSP_OBJECT, and field OBJECT_NAME in table HSP_UNIQUE_NAME as varchar2(240). The default definitions of the fields in Hyperion Plan

  • Select Query LQUA Table

    Hi Experts Can Any one tell me , Is there anything wrong in this select query, As per my knoledge everything is Fine, But Still i am getting SY-SUBRC = 4 for this Query, Its a Warehouse Management table LQUA i have Used. TABLES:mara,lqua. *Internal T

  • Weirdest Thing

    I have not had this happen to me in my 10 years of using GB. When I hit the New Track icon or even through the drop down menu, NOTHING happens, when I am setting up for a Software Instrument track. YET, if I switch it to either Guitar Track or Real I

  • Volume Key not work after installing Sametine Notes 9

    Just after installing sametine Note version 9 the voliume key stopped working.  I have a volume logo showing an interdiction under the logo. I tried to dopwnload an Apple fix for LED cinema display but the nessage said my computer does not need it.