multiple function return values

Hello

create tablepermission role_

(

role_id NUMBER not null,

permission_id NUMBER not null

);

insert into role_permission (ROLE_ID, PERMISSION_ID)

values (16: 1);

insert into role_permission (ROLE_ID, PERMISSION_ID)

values (17: 1);

Insert role_permission (ROLE_ID, PERMISSION_ID)

values (18: 1);

insert into role_permission (ROLE_ID, PERMISSION_ID)

values (17: 2);

insert into role_permission(ROLE_ID, PERMISSION_ID)

values (18, 2);

insert into role_permission(ROLE_ID, PERMISSION_ID)

values (15: 1);

insert into role_permission(ROLE_ID, PERMISSION_ID)

values (20, 1);

commit;

need to create the function for a select statement to integrate it within a query.

create or replace function return_role (i number) return?

is

Start

Select role_id of

in?

(select role_id, max (y.permission_id)

of role_permission y

Role_id group

After max (y.permission_id) = 1)

end return_role;



my request should be like this:

updated roles

set = 1 ID

where role_id in (select return_role (1) double)

Please your help.

the solution should be without creating an object type in the database.

Thanks in advance

Naama



Example to demonstrate with a pipeline function (although I wouldn't recommend this way)...

SQL > create table role_permission
() 2
3 role_id NUMBER not null,
4 permission_id NUMBER not null
5  );

Table created.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (16: 1);

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (17: 1).

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (18: 1);

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (17: 2);

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (18, 2);

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (15: 1);

1 line of creation.

SQL > insert into role_permission (ROLE_ID, PERMISSION_ID) values (20, 1);

1 line of creation.

SQL > commit;

Validation complete.

SQL > create type t_roles in the table of the number;
2.

Type of creation.

SQL > create or replace function return_role (i number) t_roles return pipeline as
2 role of the cursor is
3. Select role_id
role_permission 4 y
Group of 5 by role_id
6. having max (y.permission_id) = 1;
7. start
8 r to the role
9 loop
hose 10 row (r.role_id);
11 end of loop;
12 end return_role;
13.

The function is created.

SQL > create table roles (number role_id, identification number)
2.

Table created.

SQL > insert into roles (role_id, id) values (15.0);

1 line of creation.

SQL > insert into roles (role_id, id) values (16.0);

1 line of creation.

SQL > insert into roles (role_id, id) values (17.0);

1 line of creation.

SQL > insert into roles (role_id, id) values (18.0);

1 line of creation.

SQL > insert into roles (role_id, id) values (19.0);

1 line of creation.

SQL > insert into roles (role_id, id) values (20.0);

1 line of creation.

SQL > commit;

Validation complete.

SQL > update roles
2 = 1 set ID
3 where in (select column_value role_id
table 4 (return_role (1))
5                    )
6.

3 lines to date.

SQL > select * from roles
2.
ROLE_ID-ID
---------- ----------
15 1
16 1
17 0
18 0
19 0
20 1

6 selected lines.

Tags: Database

Similar Questions

  • error with function returning values 'multiple '.

    Hello

    I am trying to write a function to return values "multiple".

    However, he returned the following error when compiling

    Errors of compilation for the sch1.myfn FUNCTION

    Error: PLS-00382: expression is of the wrong type
    Online: 19
    Text: RETURN V_res;

    Error: PL/SQL: statement ignored
    Online: 19
    Text: RETURN V_res;


    question:

    is 1 - necessary to always declare an array? as he's going to return only a single record with multiple columns





    Create or REPLACE the TYPE as result_t table;

    CREATE or REPLACE TYPE result_t as object
    (comments of the user varchar2 (100), varchar2 (4000));



    FUNCTION to CREATE or REPLACE myfn (IN_ID IN VARCHAR2, IN_BEGIN IN DATE) result IS
    type V_res_t is RECORD (user varchar2 (100) comments varchar2 (4000));
    V_res V_res_t;
    BEGIN
    Select a.user, a.comment
    in V_res.user, V_res.comments
    from View1,.
    (select distinct id,
    begin_time,
    Max (Time) on max_time (order by times desc) of view2 b
    where id = IN_LOTID
    and begin_time = IN_BEGIN) b
    where a.id = b.id
    and a.begin_time = b.begin_time
    and a.time = max_time
    and a.id = IN_ID
    and a.begin_time = IN_BEGIN;

    RETURN V_res; -> This is the line that the system keep complaining
    END;

    Note: ignore pls if the results returned is correct, but I expect to always return one row

    pls advise

    TKS & rgds

    Forget your 'result' of tabular type of.

    SQL> CREATE OR REPLACE TYPE result_t as object
      2  (user# varchar2(100), comments varchar2(4000));
      3  /
    
    Type created.
    
    SQL>
    SQL> CREATE OR REPLACE FUNCTION myfn (IN_ID IN VARCHAR2, IN_BEGIN IN DATE) RETURN result_t IS
      2  user# varchar2(100);
      3  comments varchar2(4000);
      4  BEGIN
      5  RETURN result_t(user#,comments);
      6  END;
      7  /
    
    Function created.
    
    SQL>
    

    Nicolas.

  • How the two function return values

    Dear all,

    Please explain, how the two values of function return?

    give a simple example.

    OK, a few examples...

    First example, using a type of structured on the database object:

    SQL > create or replace type tMyValues as an object (yr number, number, number of dy mn)
    2.

    Type of creation.

    SQL > create or replace function getMyValues return tMyValues is
    2 number of y: = extraction (year sysdate);
    number of 3 m: = extraction (sysdate months);
    number of 4 d: = extract (day of sysdate);
    5. start
    6 return new tMyValues(y,m,d);
    7 end;
    8.

    The function is created.

    SQL > set serverout on

    SQL > declare
    2 myValues tMyValues;
    3. start
    4 myValues: = getMyValues();
    5 dbms_output.put_line (' year: ' | myValues.yr);
    6 dbms_output.put_line (' month: ' | myValues.mn);
    7 dbms_output.put_line (' date: ' | myValues.dy);
    8 end;
    9.
    Year: 2015
    Month: 4
    Day: 1

    PL/SQL procedure successfully completed.

    Second example, using an associative array within PL/SQL:

    SQL > set serverout on
    SQL > declare
    2 type tMyValues is table of the index number to varchar2 (10);
    3 myValues tMyValues;
    4
    5 function getMyValues return tMyValues is
    6 retValues tMyValues;
    7. start
    8 retValues ('Year'): = extraction (year sysdate);
    9 retValues ('Month'): = extraction (sysdate months);
    10 retValues ('Day'): = extract (day of sysdate);
    11 return retValues;
    12 end;
    13. begin
    14 myValues: = getMyValues();
    15 dbms_output.put_line (' year: ' | myValues ('Year'));
    16 dbms_output.put_line (' month: ' | myValues ('Month'));
    17 dbms_output.put_line (' date: ' | myValues ('Day'));
    18 end;
    19.
    Year: 2015
    Month: 4
    Day: 1

    PL/SQL procedure successfully completed.

    For the pipeline functions, see the example I wrote on the link provided by ReemaPuri (answer No. 3) that I don't need to re - write what I did before.

  • ExtendScript function return values

    As far as I know, it is only possible to perform functions an Extension of CS ExtendScript. I see no (direct) to obtain the return value of a function of ExtendScript.

    CSXSInterface.getInstance () .evalScript () does not return any useful information. Am I missing something, or should I make a feature request?

    Substances

    Hey, substances,

    Try:

    function test1() {}

    Alert ("Hello");

    return "42blah blah blah."

    }

    You must serialize the object into an Xml STRING to return, and it must be in the format above (for an object in the property data of the SyncRequestResult). You can't return an object directly. It will not automatically put in the above xml format.

    You can also send back an arbitrary block of XML.

    Bob

  • Calling a function multiple return values...

    Hello

    I wrote a simple function 2 return values. It comes to my own understanding.

    create or replace function func1 (empid number)

    Return number

    is

    number of SAL;

    number of deptID;

    Start

    Select the wage in sal of employees where employee_id = empid;

    Select department_id from deptid from employees where employee_id = empid;

    return of sal;

    deptid return;

    end;

    I tried to call the function like below: -.

    declare

    number of performance(1);

    Result2 number;

    Start

    performance(1): = func1 (101);

    Result2: = func2 (101);

    dbms_output.put_line(result ||) '' || Result2);

    end;

    output:-1700 1700

    the salary was posted twice.

    I understand that the second query has not been taken into account.

    Please let me know how this can be achieved.

    Thanks and greetings

    Here is an example of functions Oracle return multiple values - dBforums:

    CREATE or REPLACE TYPE pmc_tab AS TABLE OF NUMBER;

    CREATE TABLE v_stats_daily (start_date date, number of Field1, Field2 number, field3 number);

    INSERT INTO v_stats_daily VALUES('08-OCT-2003',10,20,30);

    INSERT INTO v_stats_daily VALUES('08-OCT-2003',40,50,60);

    INSERT INTO v_stats_daily VALUES('08-OCT-2003',70,80,90);

    CREATE OR REPLACE FUNCTION PMC_STATS

    (pStatDate Date) IS BACK pmc_tab

    MyArray pmc_tab;

    NUMBER of vstat1;

    NUMBER of vstat2;

    NUMBER of vstat3;

    BEGIN

    MyArray: = pmc_tab();

    SELECT sum (Field1), sum (field2), sum (field3)

    IN vstat1, vstat2, vstat3

    OF v_stats_daily

    WHERE the arguments start_date = pStatDate;

    MyArray.EXTEND;

    MyArray (1): = vstat1;

    MyArray.EXTEND;

    MyArray (2): = vstat2;

    MyArray.EXTEND;

    MyArray (3): = vstat3;

    RETURN MyArray;

    END;

    /

    Set serveroutput ON

    DECLARE

    MyDate DATE;

    MyArray pmc_tab;

    I have SEVERAL;

    numOut NUMBER;

    BEGIN

    MyArray: = pmc_stats('08-OCT-2003');

    dbms_output.put_line (' number of Table: ' | to_char (myArray.Count));

    FOR i IN 1.MyArray.last LOOP

    numOut: = MyArray (i);

    -If numOut is null then

    dbms_output.put_line (' value: ' | to_char (numOut));

    -end if;

    END LOOP;

    END;

    /

    /

    Table number: 3

    Value: 120

    Value: 150

    Value: 180

    PL/SQL procedure successfully completed.

    /

    Post edited by: Elya

  • Function - return multiple values in a concatenated string

    Hello

    Is it possible for a function return a concatenated string (combining more than one number). I'm trying to return the purchase by the introduction and invoice_id number and code order number, but an invoice_id can have several PO with the same code number. I want to concatenate the PO numbers with commas, for example

    10124, 10090, 10987

    At the present time, the function returns NULL for those cases that have more than one purchase order number.

    Thank you
    func_get_po(i.invoice_id, cc.code_combination_id) "PO No",
    func_get_po_requester(i.invoice_id, cc.code_combination_id, func_get_po(i.invoice_id, cc.code_combination_id)) "PO Requester",
    

    Of course, this can be done without any problem.
    If it returns NULL, then you must debug function and check the operating logic. I know that it will take a little of your time, but not problems with the logic of syntax and concatenation.

  • Use the return value to do step digital multiple success or failure

    Hello

    I use a multiple digital step to check several measurements by an external DMM through a function created in CVI.  I would like to use the return value of the function to replace the global status of the step. The reason is that the return value indicates a communication error, while steps are being taken, and which would lead to a "fake" fake or false 'Pass '.

    What I would do is more or less this >

    If the return value is 0, then check if the measuremets are between the limits

    If return value! 0 = there was a communication error so step continues to operate independently of the measure.

    I tried combining multiple digital step with a step of pass/fail, but it does not work.

    I also trie to change the expression of the status of the multiple digital steps but basically ignores him.

    Any ideas?

    Thank you

    Javier

    Why don't you just make that return the value limits for multiple numerical limit stage.  Comparison of the EQ value and the low limit to 0.

    That would make the most sense.

  • Return value of DLL LabVIEW Build to the Prototype of the function

    Hi all

    I know LabVIEW can generate a DLL with return value with a function like prototype

    Sub nomfonction (arguments);

    We could define the return value to arguments.

    However, LabVIEW build a DLL with return value instead of "null" in the United States

    int nomfonction (arguments);

    In fact, I could achieve this when my part of connector VI has a 1 linked indicator.

    I could get my prototype of function dll in the application as Builder

    Double functioname (void); or well functioname (void); or some

    Although I could do above, this applies only when my VI has 1 single output.  If the VI

    1 more arguments, I still get

    Sub nomfonction (arguments);

    So I missed something? Or is this a limit of LabVIEW?

    Please don't get angry if this question has been asked before, I'm lack of subject

    LabVIEW to communicate with other languages.

    Thank you

    Jean Cyril

    You can.  In the construction specifications, under source files, go to set your prototype.  on the right, there is a drop down 'Output VI' which is what you want.  Note that I only saw him able to return numeric values.

  • Function return undefined values

    My function returns undefined values. It seems that the return of the function statement is executed before the database is queried and values are assigned to variables. If I do an alert within the loop for () I get the correct values from the database, but these values are not affected before excecuting the return statement function. How can I do this differently?

    function getColumnNames(table){
        var rs1, rs2, rs3, rs4, rs5;
        db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM schema WHERE table_name=?",[table], function(ax, results){
                var size = results.rows.length, i;
                var item;
                for (i = 0; i < size; i++){
                    item = results.rows.item(i);
                    rs1 = item.col1;
                    rs2 = item.col2;
                    rs3 = item.col3;
                    rs4 = item.col4;
                    rs5 = item.col5;
                                    alert(rs1); //correct value is returned here
                }
            });
        });
        return [rs1, rs2, rs3, rs4, rs5];
    }
    

    Hey Fabian,.

    You are quite correct that the return statement is executed before the database returns the results. There are ongoing asynchronous calls. You can set breakpoints in JavaScript code to see what is happening. You can correct the problem by using function callbacks. I edited your code below to use the callback functions - there might be a few typos, but the general approach should be wooded.

    function getColumnNames(table, callback){
        var rs1, rs2, rs3, rs4, rs5;
        db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM schema WHERE table_name=?",[table], function(ax, results){
                var size = results.rows.length, i;
                var item;
                for (i = 0; i < size; i++){
                    item = results.rows.item(i);
                    rs1 = item.col1;
                    rs2 = item.col2;
                    rs3 = item.col3;
                    rs4 = item.col4;
                    rs5 = item.col5;
                        alert(rs5); //correct values are being returned
                    callback([rs1, rs2, rs3, rs4, rs5]);
                }
            });
        });
    }
    
    // example of how to call getColumnNames with callback
    getColumnNames('importantTable', function (result)
    {
        console.log(result);
    });
    
    // alternative version
    function onCallback(result)
    {
        console.log(result);
    }
    
    getColumnNames('importantTable', onCallback);
    

    I hope this helps.

    See you soon,.

    James

  • ORA-06503: PL/SQL: function returned no value ORA-06512:

    Hi all

    SQL > set serveroutput on

    SQL > CREATE OR replace FUNCTION qty_value (p_item_id number)

    2 RETURN NUMBER

    3 EAST

    4 v_qty_arrival NUMBER;

    5 BEGIN

    6. SELECT THE CASE SENSITIVE OPTION

    7. WHAT (SUM (b.quantity) - SUM (b.quantity_received)) < = 0 THEN 0

    8 ELSE (SUM (b.quantity) - SUM (b.quantity_received))

    9 END Qty_Arrival

    10 INTO v_qty_arrival

    Po_lines_all 11 a,

    po_line_locations_all 12 b

    13 WHERE a.po_line_id = b.po_line_id

    14 AND a.item_id = p_item_id;

    15 EXCEPTION

    16 THEN THAN OTHERS THEN

    17 v_qty_arrival: = NULL;

    18 RETURN v_qty_arrival;

    19 END qty_value;

    20.

    The function is created.

    SQL >

    SQL > select xxc_qty_arrivale (214960) double

    2.

    Select xxc_qty_arrivale (214960) double

    *

    ERROR on line 1:

    ORA-06503: PL/SQL: function returned no value

    ORA-06512: at the 'APPS '. XXC_QTY_ARRIVALE', line 19

    Back AFTER using the exception block is fine as long as your code actually REACHED the exception block.

    When there are no errors, then your code will not enter the exception block, but you still NEED to return a value, since it is what functions a function wants to return a value, that's what the functions are made for.

    Spot the differences between the following 3 functions. Understand how they work.

    The first function has only a return in the exception block but runs correctly. Result: error, because the back is missing in the code block.

    The second function has a return in the exception block and one in the block of code and runs correctly. Result: no error, because the return is not missing in the code block.

    The third function has a return in the exception block and one in the block of code and is forced into an error. Result: no error, because the return of the exception handler is used (instead of retriggering of the error, which you would normally do).

    SQL > create or replace function myfunc

    2 return number

    3 as

    4 start

    5 dbms_output.put_line ('in the section of code');

    6 null;

    7 exception

    8 then than others

    9. can

    10 dbms_output.put_line (' in the exception handler ' |) SQLERRM);

    11      --

    12 return 0;

    13      --

    14 end;

    15.

    The function is created.

    SQL > select double myfunc;

    Select double myfunc

    *

    ERROR on line 1:

    ORA-06503: PL/SQL: function returned no value

    ORA-06512: at "GHPLUS. MYFUNC", line 14

    In the section of code

    SQL > create or replace function myfunc

    2 return number

    3 as

    4 start

    5 dbms_output.put_line ('in the section of code');

    6 null;

    7    --

    8 return 1;

    9    --

    10 exceptional

    11 so that others

    12. can

    13 dbms_output.put_line (' in the exception handler ' |) SQLERRM);

    14      --

    15 return 0;

    16      --

    end 17;

    18.

    The function is created.

    SQL > select double myfunc;

    MYFUNC

    ----------

    1

    1 selected line.

    In the section of code

    SQL > create or replace function myfunc

    2 return number

    3 as

    n number 4;

    5. start

    6 dbms_output.put_line ('in the section of code');

    7 n: = 1/0; -force an error (zero divisor) to join the exception handler

    8    --

    9 return 1;

    10-

    exception 11

    12 so that others

    13. can

    14 dbms_output.put_line (' in the exception handler ' |) SQLERRM);

    15      --

    16 return 0;

    17      --

    18 end;

    19.

    The function is created.

    SQL > select double myfunc;

    MYFUNC

    ----------

    0

    1 selected line.

    In the section of code

    In the handler for exception ORA-01476: divisor is equal to zero

    SQL >

  • Problem of return values of functions

    Flash MX2004
    I am trying to create a game similar to Lingo, if you've never seen on TV. I had a bit of code that was working until I decided to divide it functions... specifically I try return values of 2 functions, and I get nothing back. When I track it comes back undefined. Can we have a look at this code to see if there is something really wrong with her?

    Any help is greatly appreciated!

    ScottieBitter

    Rothrock, Craig,

    Thank you both for your help. I applied your suggestions and now my tracks are back with the results that I expect!
    Awesome!

    Now to continue to work on this stuff... it's an assignment for a class account tomorrow and I have a long way to go...

    ScottieBitter

  • ORA-06503: PL/SQL: function returned no value

    Hi guys,.
    I wrote a function that returns the number of quarter for a given date.
    Here's the function

    FUNCTION to CREATE or REPLACE fn_get_quarter
    (p_date DATE)
    RETURN NUMBER
    AS
    v_qtr NUMBER;
    BEGIN
    Select TO_CHAR (p_date, 'Q')
    IN v_qtr
    DOUBLE;
    dbms_output.put_line (' it's quarter ' | v_qtr);
    END;

    It compiled without error.

    Here is the test case that I wrote

    DECLARE
    p_date DATE: = TO_DATE('12/22/2009','MM/DD/YYYY');
    v_qtr NUMBER;
    BEGIN
    v_qtr: = fn_get_quarter (p_date);
    END;

    When I run the present, I get the following error.

    ORA-06503: PL/SQL: function returned no value
    ORA-06512: at "GPS_FVO. FN_GET_QUARTER', line 13
    ORA-06512: at line 7

    But surprisingly, I get the result.

    Please suggest and let me know how to get rid of this error and why I get this error.

    Thanks in advance.
    Sam

    RETURN v_qtr;
    should be added after DBMS_OUTPUT

  • Impossible to retrieve the return value of function from pl/sql using the DB adapter

    Dear Experts,

    I use the DB adapter in my BPEL process. Using the DB adapter I invoke a PL / SQL function. I am able to send two input parameters for the pl/sql function. But I do not know how to retrieve the return value of the function. Please suggest me.

    Thank you
    Rajesh

    Can you tell how pl/sql function looks like you? you return the value of the function, right?

  • Offshoot of page based on the return value of function

    I have a combo box (P2008_SUPPORTING_MATERIALS) with 'Yes' and 'No' values.

    I need a button that will save the selected value, and then create a branch to the 1092 page if it of 'Yes' or branch to page 2094 if it is 'no '.

    That's what I did:

    1 create a SAVE button
    2. created a page process of type PL/SQL with function (see code below) inside (PageBranchDecision). The conditional processing I put him "when press button" for the "SAVE" button.
    3. create a branch of the page with a branch type of DIRECTION to the FUNCTION RETURN A PAGE. For the action of the branch, I put the name of the procedure on the page (PageBranchDecision). Because these are conditions, I defined him "when press button" on the "SAVE" button.

    This is the code for the page process:

    DECLARE
    whole n_page_id;
    v_sup VARCHAR2 (3);

    BEGIN
    v_sup: =: P2008_SUPPORTING_MATERIALS;

    IF v_sup = "Yes".
    THEN
    SELECT 1092 INTO double n_page_id;
    RETURN n_page_id;
    ON THE OTHER
    SELECT 2049 INTO double n_page_id;
    RETURN n_page_id;
    END if;

    END;

    Now, that's the problem... According to the 'Oracle HTML DB manual"page 294 books and ' easy Oracle HTML-DB' page 307, with the type of the branch of 'Branch to function returning a Page', a function PL/SQL is written which returns a digital page at junction id. In my code, it would be 'n_page_id '. But, when I run my page and click on my "SAVE" button I gives me an error that a RETURN statement cannot contain an expression.

    I don't know why I get this error. I need to get the value of the page to the branch based on the 'yes' or 'no '.

    Someone has an idea what I am doing wrong? My situation seems, as it is possible through the logic, I'm following?

    Thanks in advance,
    Maggie

    ch - ensure that any unconditional branch on the page has a largest number in sequence to ensure that this branch is triggered and ensure that there is no other branch that is triggered by the "SAVE" button

  • StartAsyncTask using and obtaining a return value

    Hello

    I'm just starting to try and learn LUA and all Lightroom SDK.  Here is a sample of my code:

    local lrApplication = import "LrApplication".

    local LrTasks = import "LrTasks".

    local activeCatalog = lrApplication.activeCatalog)

    local currentPhotos = activeCatalog:getMultipleSelectedOrAllPhotos()

    are there local = LrTasks.startAsyncTask (function () return currentPhotos [1]: getFormattedMetadata ('fileName') end)

    wheneven check or try to use y sucks.

    Please someone tell me the stupid thing, I am doing wrong so I lose more hair decrease.

    I know that currentPhotos has 5 photos in its collections, because later I do this:

    because me, I onePhoto in ipairs (currentPhotos)

    and he travels 5 times, matches to the top for the number of photos in the folder I selected in Lightroom.

    Thank you.

    Start-async-task does not return a value, it just schedules a task and keeps going on - the job runs later.

    In general, it is best to start a task immediately in response to a menu button or press selection... and everything in this task. -then you don't need to start anywhere, unless you need it like real parallel processes, such as background tasks.

    To avoid multiple tasks from due to asynchronous events, use a form any to avoid recursion.

    Rob

Maybe you are looking for