Methods returning the wrong values...

Hi,
I've managed to get my hands on vb6 (though, it would be really nice if there was vb .net support.. I thougt this was coming in 1.5?) and have run into a rather odd problem. get Methods seem to return values from the wrong methods! For example, let's pretend my activex control stores values about a person. getName would return their age, while getAge might return null! Something is also going wrong with my method that accepts input and returns a value (okay, it is a money conversion program!)... it is returning null!
I have verified that all these methods work perfectly by running the code in JBuilder with a Main class.
Any idea what to do?
(or how to make it work in .net!!!)
Thanks!

Wow!! I think the key was using the CreateObject command. I was adding it as a control, like I would a textbox. Things are working perfectly as far as I can tell! I wonder how I am supposed to test it in the vb6 testbox then.. Hrm.. Odd.
This is great, though!! Thanks so much. :)

Similar Messages

  • Recursion:returning the largest value in a linked list

    import java.io.*;
    import java.util.*;
    class Node{
         int num;
         Node next;
         Node(int n){
              num = n;
              next = null;
    class RecursivePrint{
         public static void main(String[] args){
              Node np, last;
              Node top = null;
              last = null;
              for(int i = 1; i <11; i++){
                   np = new Node(i);
                   if(top==null)top = np;
                        else
                   last.next = np;
                   last = np;
              int x =Largest(top);
             System.out.println("large is "+ x);
         }//end main
         public static int Largest(Node top){
              int large = 0;
              if(top==null){
                   return 0;
                   while(top!=null){
               if(top.num > large){
                   large = top.num;
                   //top = top.next;
              Largest(top.next);     
         }//while
         return large;
    }//end class
    I am trying to return the largest value in a linked list (10) in this case.  when I do it withour recurrsion it works ok, but when I try it with recurrsion it dies.  The logic seems ok to me, cannot figure why it dies.

    chetah wrote:
    public static int Largest(Node top){
              int large = 0;
              if(top==null){
                   return 0;
              if(top.num > large){
                   large = top.num;
                   //top = top.next;
                   Largest(top.next);
         return large;
    Initially I had the above, it return only 1 that was the reason for puting the loop.You don't seem to understand recursion or variable scope.
    int large = 0;large is a different variable inside each instance of the method.
    So when you get back up to the value 1 from the recursive calls its just comparing 1 to 0
    Here's a solution...
         public static int Largest(Node top){
              if(top.next != null){
                   if(Largest(top.next) > top.num)
                        return Largest(top.next);}
              return top.num;
         }

  • Function to return the Entry Value based on Assignment, Element and Date

    Hi Guys,
    Is there a function that returns the Entry Value for the Assignment Element, based on the Assignment Number, Element Name, Entry Segment and the End of Period date?
    Example:
    ==============
    Input Parameters:
    Employee: Iana
    Assignment Num: 123
    Element: D480
    Element Entry: Fund Name
    Output Parameter:
    Element Entry Value: MLC Super Fund
    Thanks,
    Iana

    For element entry values you can use:
    select petf.element_name, nvl(peevf.screen_entry_value,0) screen_entry_value
    from
    pay_element_entries_f peef, pay_element_types_f petf,
    pay_element_entry_values_f peevf, pay_input_values_f pivf,
    per_all_assignments_f paaf
    where petf.element_type_id = peef.element_type_id
    and :p_date_earned between pivf.effective_start_date and pivf.effective_end_date
    and :p_date_earned between petf.effective_start_date and petf.effective_end_date
    and peevf.input_value_id = pivf.input_value_id
    and paaf.assignment_id = peef.assignment_id
    and petf.business_group_id = :p_business_group_id
    and peevf.element_entry_id = peef.element_entry_id
    and :p_date_earned between peef.effective_start_date and peef.effective_end_date
    and :p_date_earned between peevf.effective_start_date and peevf.effective_end_date
    and :p_date_earned between paaf.effective_start_date and paaf.effective_end_date
    and pivf.name = :p_input_value_name
    and petf.element_name = :p_element_name
    and peef.entry_type = 'E'
    and peevf.effective_start_date = peef.effective_start_date
    and peevf.effective_end_date = peef.effective_end_date
    --and peef.assignment_id = :p_assignment_id
    and paaf.assignment_number = :p_assignment_number;
    For payroll results you can use:
    select sum(prrv.result_value)
    from pay_run_results prr, pay_run_result_values prrv,
    pay_assignment_actions paa, pay_payroll_actions ppa,
    pay_element_types_f petf, pay_input_values_f pivf,
    per_all_assignments_f paaf, per_all_people_f papf
    where
    petf.element_type_id = pivf.element_type_id
    and :p_pay_date between petf.effective_start_date and petf.effective_end_date
    and :p_pay_date between pivf.effective_start_date and pivf.effective_end_date
    and paa.assignment_action_id = prr.assignment_action_id
    and petf.element_type_id = prr.element_type_id
    and ppa.payroll_action_id = paa.payroll_action_id
    and prrv.input_value_id = pivf.input_value_id
    and prr.run_result_id = prrv.run_result_id
    and petf.element_name = :p_element_name
    and pivf.name = :p_input_value_name
    and ppa.date_earned = :p_pay_date
    and papf.person_id = paaf.person_id
    and nvl(prr.start_date,ppa.effective_date) between paaf.effective_start_date and paaf.effective_end_date
    and nvl(prr.start_date,ppa.effective_date) between papf.effective_start_date and papf.effective_end_date
    and paaf.assignment_id = paa.assignment_id
    and papf.employee_number = :p_employee_number;

  • Return Into.  Can I return the old value in an update statement?

    Hello - I have an update statement and I need the value of a field, prior to the update. Is it possible to use the Return Into to do this? Or do I have to have a separate select statement prior to the update statement in order to store that value in a variable?
    Thanks!

    RETURNING INTO is valid for an UPDATE, but it returns the new value, not the old value.
    SCOTT @ nx102 Local> select * from a;
          COL1
             4
    Elapsed: 00:00:00.00
    SCOTT @ nx102 Local> ed
    Wrote file afiedt.buf
      1  declare
      2    l_old_col1 number;
      3  begin
      4    update a
      5       set col1=col1+1
      6     returning col1 into l_old_col1;
      7    dbms_output.put_line( l_old_col1 );
      8* end;
    SCOTT @ nx102 Local> /
    5
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.00If you are trying to track historical changes, have you looked at Workspace Manager? That can be far easier than writing your own change tracking code...
    Justin

  • How do I return the displaysleep value from the console?

    I know that I can do pmset -g to list all the settings, including displaysleep, but I  was hoping there was a command similar to that for the screensaver which only returns the numerical value:
    defaults -currentHost read com.apple.screensaver idleTime
    Any possibility there is a console function that will return the value only?
    Thanks.

    Hi RavensFan,
    Thank you for your help.
    I have seen this Max/Min function, and I tried it, but I get an error becuase my signal is apprently "dynamic data" and the max/min function accepts double precision data, so thats the problem I am encountering at this moment. I have modified the block diagram to convert the "dynamic data" into a double and then do the same thing you suggested, but I will test it tomorrow in the lab. 
    I am currently working around this by using a numeric input, which the user would simply watch the sensor output over the calibration period and manually input that value into the formula.
    Thanks again!
    PackersFan btw...
    Cheers

  • The Popup dialog Page needs two times to return the selected value[10.1.3]

    Hi All,
    I have problem in an JSF Application that uses the EMP and DEPT tables .
    the Application contains two pages
    page 1 : a calling page uses EmpView as ADF Table .
    page 2 : a popup List of Values (LOV) dialog page uses DeptView
    These cause the popup dialog page to return to the calling page and to set the selected value into the Deptno attribute .
    the calling page includes :deptno and dname columns as
    <af:column headerText="#{bindings.EmpView1.labels.Deptno}">
    <af:selectInputText value="#{row.Deptno}"
    required="#{bindings.EmpView1.attrDefs.Deptno.mandatory}"
    columns="#{bindings.EmpView1.attrHints.Deptno.displayWidth}"
    action="dialog:ChooseDept1" id="deptnoField"
    autoSubmit="true">
    <f:convertNumber groupingUsed="false"
    pattern="#{bindings.EmpView1.formats.Deptno}"/>
    </af:selectInputText>
    </af:column>
    <af:column headerText="#{bindings.EmpView1.labels.Dname}">
    <af:inputText value="#{row.Dname}" simple="true"
    required="#{bindings.EmpView1.attrDefs.Dname.mandatory}"
    columns="#{bindings.EmpView1.attrHints.Dname.displayWidth}"
    partialTriggers="deptnoField" autoSubmit="true"/>
    </af:column>
    and popup dialog page includes : Submit Button to return selected value to calling page :-
    <af:tableSelectOne text="Select and">
    <af:commandButton text="Submit">
    <af:returnActionListener value="#{row.Deptno}"/>
    <af:setActionListener from="#{row.Deptno}"
    to="#{bindings.Deptno.inputValue}"/>
    </af:commandButton>
    </af:tableSelectOne>
    the problem is
    I have to press ( two times ) the select button in the calling page to
    return the selected value into the Dname attribute .
    best regards,

    Hi,
    However, I am using the Jdeveloper 10.1.3.3, but still getting this error. I could not find any threads related to this problem and hence I wrote up here. Anyway I have also logged an SR #7179012.993 for the same with the testcase. I hope the issue will be resolved soon.
    Thanks,
    Neeraj

  • Entering a Value and Tabbing out of af:inputListOfValues displays the wrong value

    Good morning. I am having an issue with the autosubmit and tabbing out of af:inputListOfValues in my code.
    Problem: When I type in a valid value and tab out of the field, it ignores the value I entered and displays whatever the first list in the query result instead regardless of the value I typed.
    My code snippet. What it does is simply an LoV search of Employee No attached to an entity attribute and depending on selection, it will display the Employee Name within the page. (it also retrieves a table view depending what employee number was entered)
    <af:inputListOfValues id="empNoId"
                 popupTitle="Search and Select: #{bindings.EmpNo.hints.label}"
                  value="#{bindings.EmpNo.inputValue}"
                  label="#{bindings.EmpNo.hints.label}"
                  model="#{bindings.EmpNo.listOfValuesModel}"
                  required="#{bindings.EmpNo.hints.mandatory}"
                  columns="#{bindings.EmpNo.hints.displayWidth}"
                 shortDesc="#{bindings.EmpNo.hints.tooltip}"
                   binding="#{workLocationBean.txtEmpNo}"
                  partialTriggers="id1"
                 valueChangeListener="{bean.onEmpNoChange}"    
                 autoSubmit="true">
            <f:validator binding="#{bindings.EmpNo.validator}"/>
      </af:inputListOfValues>
    Other things to note:
    When I enter a valid employee number and click anywhere in the page (not TAB), it behaves correctly.
    I have been trying to figure this out for days. Even my valueChangeListener gets the wrong value (when I do System.out) when I tab out so I am not sure where to catch it and replace it with the correct value.
    Thank you.

    This usually happens when primary key is not set in view object used by LOV.
    Dario

  • GUID generation issue, SYSUUID always returns the same value.

    Hi,
    I'm using "SELECT SYSUUID FROM DUMMY" to get a guid value but it always return the same value.
    What should I do to get a unique value each time I execute the query above.
    Thanks.

    I thought I had the same problem and I found that if you generate multiple UUID's in the same SQL, it they will be the same.  If you make multiple calls, you should get multiple UUID's. 
    Try this:
    SELECT SYSUUID as UUID1 FROM DUMMY;
    SELECT SYSUUID as UUID2 FROM DUMMY;
    I get the following results:
    UUID1 = 538632FD7EA20426E10000000A3F10A9
    UUID2 = 538632FE7EA20426E10000000A3F10A9
    Notice that the strings look almost identical, but the 8th character on UUID1 is a D and the 8th on UUID2 is a E.
    Jim

  • Report query not returning the field value from external table

    hi
    I have an issue regarding reports. I have a query having 4 fields from external table and remaining from db tables. the report query returns all the fields from the db tables and only 2 fields from external table. but the same query if I tried in plsql developer it returns all the fields values.
    Can anyone please help me in this issue.
    Thanks and Regards
    kk

    Duplicate post?
    value not displaying in report whereas it returns in plsql developer
    value not displaying in report whereas it returns in plsql developer
    Please log a SR if you do not get any reply to your thread instead of creating new one.
    Thanks,
    Hussein

  • Returning the Prompt Value for a Variable

    Hi Experts,
    What I am currently trying to do is to return the values from a prompt so that I can use them in a variable. I have two Queries that are built off of two different Universes out of BEx. I do not have the same dimensions in both queries. I am merging the Universes based on the 'Employee ID' field, but I need to display Amount measures from both queries. Currently, this is functioning if I do not run any filters.
    However, as soon as I put a query filter on a dimension that does not exist within both Universes, I have a problem where Query1 is returning a dataset of maybe 10 records, while Query2 still returns a dataset of 100 records. Obviously this presents a problem when aggregating the Amount measures.
    I have tried a number of different ways to create a relationship between the measures and Employee, but I can't get things specific enough if I don't have the filtered dimension in the report. Suppose that I have Company Code filtered to 1200, I would like to show on the report only the employees from Company Code 1200. This is fine if I drag in the Employee dimension from Query1. However, once I drag in the Amount measure from Query2, the numbers are totalled for the entire 100 Employees, rather than the 10.
    I figure that I should be able to specify my results by leveraging some sort of formula. I'm currently experimenting with:
    =sum([Query2].[Amount] ForEach ([Company Code];[Query1].[Employee]) Where ([Company Code] = [Prompt1]))
    Prompt1:
    =UserResponse([Query1];"Prompt1")
    The problem with this is that the UserResponse does not return an array of values that were selected (otherwise it would say #MULTIVALUE). Instead, it seems to concatenate the selections by the user into one field. Unfortunately I can't use that for anything. Is there a way to capture the actual value from the prompt in an array?
    Alternatively, is there a better way to accomplish what I'm doing?
    Thanks,
    Brian Comeau

    Hi Brian
    I'm not familiar with Bex queries but have you tried adding using the query with the filter to be the driver for the values of the second query, so in effect you have 3 queriues:
    Query 1 with filter
    Query 2 with sub-query based on filtered query 1
    Regards
    Charles

  • DBUS_SESSION_BUS_ADDRESS set to the "wrong" value

    Hi all,
    this is related to systemctl --user stuff but only remotely. I had systemctl --user up and running for some time, but it stopped working at some point with a message  "Failed to issue method call: Process /bin/false exited with status 1". After searching a bit I figured it had something to do with dbus, so I added the following unit files:
    /etc/systemd/user/dbus.service
    [Unit]
    Description=D-Bus Message Bus
    Requires=dbus.socket
    [Service]
    ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
    ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig
    /etc/systemd/user/dbus.socket
    [Unit]
    Description=D-Bus Message Bus Socket
    Before=sockets.target
    [Socket]
    ListenStream=/run/user/%U/dbus/user_bus_socket
    [Install]
    WantedBy=default.target
    which basically gives me a user-session dbus socket in /run/user/1000/dbus/user_bus_socket. So far so good.
    What's troubling me is that DBUS_SESSION_BUS_ADDRESS is set to a non-existing socket:
    max@failenovo:~/ $ echo $DBUS_SESSION_BUS_ADDRESS
    unix:abstract=/tmp/dbus-st1aYMhS1t,guid=bdc7f9102f85b8318ba74ffe52ebc3dd
    max@failenovo:~/ $ file /tmp/dbus-st1aYMhS1t
    /tmp/dbus-st1aYMhS1t: cannot open `/tmp/dbus-st1aYMhS1t' (No such file or directory)
    So, invoking systemd --user gives me: "Failed to issue method call: Process org.freedesktop.systemd1 exited with status 1". If I manually export DBUS_SESSION_BUS_ADDRESS to the correct value from the dbus.socket unit, it works:
    max@failenovo:~/ $ systemctl --user
    Failed to issue method call: Process org.freedesktop.systemd1 exited with status 1
    max@failenovo:~/ $ DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/dbus/user_bus_socket systemctl --user
    max@failenovo:~/ $ echo $?
    0
    My two questions:
    How would I confiugure dbus-daemon (launched by gnome-session, I guess) to _actually write_ out the dbus socket in /tmp?
    OR: Where's the best place to manually set the DBUS_SESSION_BUS_ADDRESS to a value, so that it doesn't get overwritten by garbage?
    Cheers,
    Max

    have you tried this? https://bbs.archlinux.org/viewtopic.php?id=173501
    Since version 207, systemd uses a different PAM module for [email protected], and includes an incorrect default PAM config. Fix it with: # sed -i s/system-auth/system-login/g /etc/pam.d/systemd-user (or replace all occurrences of system-auth in that file with system-login).
    system-login needs to start pam_systemd: it should contain -session optional pam_systemd.so; check if a .pacnew file exists.

  • V$session prev_hash_value not returning the correct value?

    Hello,
    I am executing a plsql package (which has the following query) in two modes: through Toad and through a deployed web application. I get two results.
    SELECT sa.sql_text,
    sa.sql_id,
    ss.sid
    FROM v$session ss,
    v$sqlarea sa
    WHERE ss.status = 'ACTIVE'
    AND sa.hash_value = ss.prev_hash_value
    AND ss.username = USER;
    Toad gives me the correct result. The query above pulls the correct SQL statement. But when running through the web application it gives me
    some random SQL statement executed during that session. I thought it might have something to do with pooled JDBC connections so I made sure for that
    execution I created a new dedicated JDBC connection. Still did not work. I used the function SYS_CONTEXT('USERENV', 'SID') to report the session id
    from my java program and from the query above. Both return the same SID. I've tried different variations of that query above (removing status = ACTIVE, removing username = USER, etc...)
    and I still get the same result.
    So any thoughts on what's going on?
    Thanks,
    Piyush

    I believe I figured it out. My testing was flawed. The testing in Toad was directly calling my package (e.g., pkg_b). The web app doesn't do that. It calls pkg_a which does a bunch of setup and then calls the target package (pkg_b) using EXECUTE IMMEDIATE. Apparently the v$session stops collecting info at that point. The current statement always shows as 'BEGIN :b1 := pkg_b; END;'. But it's still confusing why it would do that. Is there another way to access SQL statements from within that dynamic block?

  • J9.03,InputSelectLOV :why the lov Jsp can't return the selected value?

    I puted a InputSelectLOV in my dataeditcompenents.jsp to display the lov Jsp,but when i selected a row,it didn't display the value i selected in my edit Jsp,how can i do?
    and can i return more values from lov to put in my editform?
    the following is my dataeditcompentents.jsp

    the following is my dataeditcompenents.jsp:
    <%@ page language="java" import = "oracle.jbo.html.*" %>
    <%@ taglib uri="/webapp/DataTags.tld" prefix="jbo" %>
    <%-- This JSP component build an edit form for a single record and
    generates an update submit event.
    It is called by the DataEdit tag --%>
    <%
    // Retrieve all request parameters using our routine to handle multipart encoding type
    RequestParameters params = HtmlServices.getRequestParameters(pageContext);
    String amId = params.getParameter("amId");
    String dsParam = params.getParameter("datasource");
    String formName = dsParam + "_form";
    String rowAction = "Current";
    String event = "Update";
    %>
    <%-- Restore the data binding to the datasource passed as parameter --%>
    <jbo:DataSourceRef id="dsEdit" reference="<%=dsParam%>" />
    <jbo:DataSource id="lov" appid="<%=amId%>" viewobject="View1" />
    <%-- Select the way to retrieve the row to edit based on the event --%>
    <jbo:OnEvent name="edit" datasource="dsEdit">
    <% rowAction = "Get"; %>
    </jbo:OnEvent>
    <jbo:OnEvent name="create" datasource="dsEdit">
    <% rowAction = "CreateOnly"; event = "Create"; %>
    </jbo:OnEvent>
    <%-- Build a form with an editable field for each of the attributes of the row --%>
    <form name="<%=formName%>" action="<%=params.getParameter("targetURL")%>" enctype="<%=params.getParameter("encType")%>" method="POST">
    <%-- Retrieve the row to edit --%>
    <jbo:Row id="rowEdit" datasource="dsEdit" rowkeyparam="jboRowKey" action="<%=rowAction%>">
    <table border="0">
    <%-- Iterate through all the Attribute of the row --%>
    <jbo:InputSelectLOV datasource="dsEdit" dataitem="RecieveId" displaydatasource="lov" displaydataitem="SysId,UserName" displayvaluedataitem="SysId" formname="<%=formName%>" lovurl="lovcomp.jsp" />
    <jbo:AttributeIterate id="def" datasource="dsEdit">
    <tr>
    <td title="<jbo:ShowHint hintname='TOOLTIP'></jbo:ShowHint>" align="right"><jbo:ShowHint hintname="LABEL"></jbo:ShowHint><%
    // Mark all the mandatory attributes with '*'
    if (def.isMandatory())
    %>*<%
    } %>
    </td>
    <td wrap="soft" title="<jbo:ShowHint hintname='TOOLTIP'></jbo:ShowHint>"><jbo:InputRender datasource="dsEdit" formname="<%=formName%>" />
    </td>
    </tr>
    </jbo:AttributeIterate>
    </table>
    <%-- Generate an "Update" event as part of the Form --%>
    <jbo:FormEvent event='<%=event%>' datasource='dsEdit' addrowkey='true' />
    </jbo:Row>
    <jbo:OnEvent name="create">
    <% rowEdit.remove(); %>
    </jbo:OnEvent>
    <%-- Pass along originURL request parameters using a hidden field--%>
    <input type="hidden" name="originURL" value="<%=params.getParameter("originURL")%>">
    <input type="submit" value="Update">
    <input type="reset" value="Reset">
    </form>
    <jbo:ReleasePageResources />

  • JFormattedTextField getValue() is returning the wrong type

    So this is a very strange I've found in my ever-growing project I've been working on. I have four text boxes set up. Essentially, one is the total, the second is part_one, the third part_two, and the last the_rest.
    They've all been declared and initialized identically, e.g.:
    JFormattedTextField total = new javax.swing.JFormattedTextField(java.text.NumberFormat.getCurrencyInstance(Locale.US));
    JFormattedTextField part_one = new javax.swing.JFormattedTextField(java.text.NumberFormat.getCurrencyInstance(Locale.US));
    JFormattedTextField part_two = new javax.swing.JFormattedTextField(java.text.NumberFormat.getCurrencyInstance(Locale.US));
    JFormattedTextField the_rest = new javax.swing.JFormattedTextField(java.text.NumberFormat.getCurrencyInstance(Locale.US));the_rest is supposed to auto update as any of the other three are changed (the_rest = total - part_one - part_two)
    However, I'm having issues updating the text boxes, as I am getting a ClassCastException when trying to calculate the_rest:
    float calculated = calculateTheRest((Float)total.getValue(), (Float)part_one.getValue(), (Float)part_two.getValue());
    the_rest.setValue(calculated);And my calculateTheRest() function:
    private float calculateTheRest(Float total, Float part_one, Float part_two) {
            if(total == null)
                total = 0.0f;
            if(part_one== null)
                part_one = 0.0f;
            if(part_two== null)
                part_two = 0.0f;
            return total - (first + second);
    }What am I doing wrong here?
    Edited by: GranoblasticMan on Sep 16, 2008 7:49 AM
    Fixed typos... was hand-retyping this, not copy-and-pasting.
    Edited by: GranoblasticMan on Sep 16, 2008 7:51 AM
    And the exact error message I'm getting is:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Long

    For the time being, I've changed my calculateTheRest() function:
            private float calculateTheRest(Object total, Object part_one, Object part_two) {
            if(total == null)
                total = new Float(0.0f);
            if(part_one == null)
                first = new Float(0.0f);
            if(part_two == null)
                second = new Float(0.0f);
            return convertToFloat(total) - (convertToFloat(part_one) + convertToFloat(part_two));
    private float convertToFloat(Object o) {
            if(o instanceof Number)
                return ((Number)o).floatValue();
            return Float.NaN;   
    }But I'm still wondering why this would happen. Do FormattedTextFields not actually store decimal values?

  • Return the two values in PL/SQL function

    Hi,
    How to create the PL/SQL function to return two values based on arguments?
    Can anyone suggest me the idea?
    TIA,

    Dhiva wrote:
    How to create the PL/SQL function to return two values based on arguments?A function can return only a single "+thing+".
    That thing can be a scalar value (single value). Such as date, number or string. E.g.
    create or replace function F... return number is ..That thing can be a non-scalar value (array). E.g.
    create or replace type TNumberArray is table of numbner;
    create or replace function F... return TNumberArray is ..That thing can be a complex scalar structure (record/object type) E.g.
    create or replace function F... return EMP%RowType is ..That thing can be a complex non-scalar structure (array of object/record types). E.g.
    create object TNameValue is object(
      name varchar2(30),
      value varchar2(4000)
    create or replace TNameValueArray is table of TNameValue;
    create or replace function F... return TNameValue is ..The bottom line is think structured data. A function can return a single variable. But that variable can (and should be) a proper structured data variable - and can be complex and can be non-scalar.

Maybe you are looking for