How to return a dataset using PL/SQL?

Hi All,
I am a beginner in PL/SQL for Oracle 9i.
I am converting a stored procedure written in T-SQL for SQL 2000.
It basically goes like this:
CREATE PROCEDURE CS_CidGetData
@City varchar(30)
AS
SET NOCOUNT ON
BEGIN
SELECT
FROM
UserAccounts
WHERE
City LIKE @City + '%'
END
When this procedure is executed it sucessfully returns all the Users that match the criteria.
In PL/SQL tried:
CREATE OR REPLACE PROCEDURE USERACCOUNTSSELECT
v_City IN UserAccounts.City%TYPE
AS
BEGIN
SELECT
FROM
UserAccounts
WHERE
City LIKE v_City +'%';
END;
I need the stored procedure return a dataset back to the calling application.
I realize I must define a return variable and use an INTO clause.
Can anybody please show me how to do it?
Thanks,
Amintas

Hi everybody,
Thank you very much for your support.
I have finally figured out how to do it.
Here is the code just in case someone has the same question.
You can test it using the default built-in database.
Cheers,
Amintas
create or replace package pkg_emp
AS
type rc_emp is ref cursor;
end;
create or replace
procedure SP_GetEmpData(v_empno IN emp.empno%Type,
v_ename IN emp.ename%Type,
emp_cur OUT pkg_emp.rc_emp)
is
begin
if v_empno is not null and v_ename is null then
OPEN emp_cur for
select empno,ename,sal
from emp
where empno=v_empno;
elsif v_ename is not null and v_empno is null then
OPEN emp_cur for
select empno,ename,sal
from emp
where ename like v_ename ||'%';
end if;
end;
/* Testing the stored procedure */
/*#1 */
var myresultset refcursor;
execute SP_GetEmpData(7900,null,:myresultset);
print myresultset;
/*#2 */
var myresultset refcursor;
execute SP_GetEmpData(null,'A',:myresultset);
print myresultset;

Similar Messages

  • How to get Listener Information using PL/SQL code

    How to get Listener Information using PL/SQL code

    user2075318 wrote:
    How to get Listener Information using PL/SQL codeThis approach (somewhat of a hack) can be used - but it does not really provide meaningful data at application layer.
    SQL> create or replace function TnsPing( ipAddress varchar2, port number default 1521 ) return varchar2 is
      2          type THexArray is table of varchar2(2);
      3          --// tnsping packet (should be 10g and 11g listener compatible)
      4          TNS_PING_PACKET constant THexArray := new THexArray(
      5                  '00', '57', '00', '00', '01', '00', '00', '00',
      6                  '01', '39', '01', '2C', '00', '00', '08', '00',
      7                  '7F', 'FF', '7F', '08', '00', '00', '01', '00',
      8                  '00', '1D', '00', '3A', '00', '00', '00', '00',
      9                  '00', '00', '00', '00', '00', '00', '00', '00',
    10                  '00', '00', '00', '00', '00', '00', '00', '00',
    11                  '00', '00', '00', '00', '00', '00', '00', '00',
    12                  '00', '00', '28', '43', '4F', '4E', '4E', '45',
    13                  '43', '54', '5F', '44', '41', '54', '41', '3D',
    14                  '28', '43', '4F', '4D', '4D', '41', '4E', '44',
    15                  '3D', '70', '69', '6E', '67', '29', '29'
    16          );
    17 
    18          socket  UTL_TCP.connection;
    19          txBytes number;
    20          rxBytes number;
    21          rawBuf  raw(1024);
    22          resp    varchar2(1024);
    23  begin
    24          socket := UTL_TCP.open_connection(
    25                          remote_host => ipAddress,
    26                          remote_port => port,
    27                          tx_timeout => 10
    28                  );
    29 
    30          --// convert hex array into a raw buffer
    31          for i in 1..TNS_PING_PACKET.Count loop
    32                  rawBuf := rawBuf || HexToRaw( TNS_PING_PACKET(i) );
    33          end loop;
    34 
    35          --// send packet
    36          txBytes := UTL_TCP.write_raw( socket, rawBuf, TNS_PING_PACKET.Count  );
    37 
    38          --// read response
    39          rxBytes := UTL_TCP.read_raw( socket, rawBuf, 1024 );
    40 
    41          UTL_TCP.close_connection( socket );
    42 
    43          --// convert response to varchar2
    44          resp := UTL_RAW.Cast_To_Varchar2( rawBuf );
    45 
    46          --// strip the header from the response and return the text only
    47          return( substr(resp,13) );
    48  end;
    49  /
    Function created.
    SQL>
    SQL> select tnsping( '10.251.93.30' ) as TNSPING from dual;
    TNSPING
    (DESCRIPTION=(TMP=)(VSNNUM=169869568)(ERR=0)(ALIAS=LISTENER))
    SQL> select tnsping( '10.251.95.69' ) as TNSPING from dual;
    TNSPING
    (DESCRIPTION=(TMP=)(VSNNUM=0)(ERR=0)(ALIAS=LISTENER))
    SQL>

  • PL/SQL--How to calculate a median using PL/SQL

    How would I calculate a median, not an average, using PL/SQL? Thanks.

    1. The MEDIAN value is the value of the item in the middle of a data set.
    2. For a dataset with 5 rows (sorted by the value) it is the value in row 3; for any ODD number of rows n use row number 'TRUNC(n/2) + 1'.
    3. For a dataset with 6 rows the average of the two middle rows (rows 3 and 4) is usually used; for any EVEN number of rows n use row numbers 'TRUNC(n/2)' and 'TRUNC(n/2) + 1'.
    4. Check for the special case where there are no rows in the result set first.
    Using pseudo-code it might look like:
    SELECT COUNT(1) INTO num_rows FROM mytable;
    IF num_rows = 0 THEN
    RETURN 0;
    END IF;
    first_row := TRUNC(num_rows/2);
    -- set 2nd row to be same as first if ODD number of rows
    second_row := first_row;
    IF first_row * 2 = num_rows THEN
    -- set 2nd row to be row after 1st if EVEN number of rows
    second_row := second_row + 1;
    END IF;
    -- query the average needed. Note that for an ODD number of rows this still works.
    SELECT avg(myvalue) FROM (SELECT ROWNUM rnum, rvalue FROM (SELECT myvalue rvalue FROM mytable ORDER BY myvalue))
    WHERE rnum BETWEEN first_row AND second_row;
    END IF;
    I suggest you write and test the innermost query above first (SELECT myvalue rvalue FROM MYTABLE ORDER BY myvalue).
    Then use it as a subquery for the '(SELECT ROWNUM ...' query.
    Then when you have both of those working wrap it in the outermost query.
    At that point you can make it a PL/SQL function or if you really want to confuse people you can perform it all with one big UNION query (to take care of the case where there are no rows).
    Good luck!
    null

  • How to return whole number using round function

    hi
    can i get sql query using round function how to return whole number value

    Hi welcome to the forum. if you want whole number value what does it mean
    1. whether you want the whole number greator than or eqaul to that number example for 12.6 you want 12 or 13
    see below example
    1.  SQL> select round(12.5) from dual;
    ROUND(12.5)
             13
    2.  SQL> select round(12.4) from dual;
    ROUND(12.4)
             12
    3.  SQL> select floor(12.5) from dual;
    FLOOR(12.5)
             12
    4. SQL> select floor(12.4) from dual;
    FLOOR(12.4)
             12
    floor will always give you a round value which is a integer or whole number less than or equal to but output of rond will differ if the value is greator than 12.5 it will give 13 but if it is less than 12.5 it will give 12, so depending on your requirement you can choose which function to use. similarly if you always want to get the whole number greator than the number you can use ceil as below
    SQL>  select ceil(12.3) from dual;
    CEIL(12.3)
            13
    SQL>  select ceil(12.8) from dual;
    CEIL(12.8)
            13

  • How to create a counter using Oracle SQL Developer?

    Is there any way to create a counter using Oracle SQL Developer to create the below scenario. Meaning it will recorded down the name of user and ID and time and the date they login.
    Library portal home statistics shows how many users (outside and within the campus) visit the library portal.
    Page Access statistics is recorded on an hourly basis. Users may select the statistics by
    yearly (statistics displayed by all months in the selected year)
    monthly (statistics displayed by all days in the selected month)
    daily (statistics displayed by all hours in the selected day)

    I'm giving here one basic post - hope this will solve your problem --
    SQL>
    SQL>
    SQL> create table audit_info
      2   (
      3     usr        varchar2(50),
      4     log_time   timestamp(6)
      5    );
    Table created.
    SQL>
    SQL>
    SQL>  create table err_log
      2     (
      3       log_cd      varchar2(20),
      4       log_desc    varchar2(500)
      5     );
    Table created.
    SQL>
    SQL>
    SQL>   create or replace procedure ins_err(errcd   in  varchar2,
      2                                        errnm   in  varchar2)
      3    is
      4      pragma autonomous_transaction;
      5    begin
      6      insert into err_log values(errcd,errnm);
      7      commit;
      8    end;
      9  /
    Procedure created.
    SQL>
    SQL>
    SQL>   create or replace procedure ins_aud(ud   in varchar2,
      2                                        unm  in varchar2)
      3    is
      4      pragma autonomous_transaction;
      5    begin
      6      insert into audit_info values(ud,unm);
      7      commit;
      8    exception
      9      when others then
    10        ins_err(sqlcode,sqlerrm);
    11    end;
    12  /
    Procedure created.
    SQL>
    SQL>
    SQL>
    SQL> create or replace trigger log_odsuser1
      2   after logon on odsuser1.schema
      3   begin
      4     ins_aud('ODSUSER1',sysdate);
      5   exception
      6     when others then
      7       ins_err(sqlcode,sqlerrm);
      8   end;
      9  /
    Trigger created.
    SQL>
    SQL*Plus: Release 9.2.0.1.0 - Production on Tue Jun 12 12:21:09 2007
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
    Connected to:
    Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.6.0 - Production
    SQL>
    SQL>
    SQL>
    SQL> set serveroutput on
    SQL>
    SQL>
    SQL> select * from audit_info;
    USR
    LOG_TIME
    ODSUSER1
    12-JUN-07 12.00.00.00000000 AMHope this will solve your purpose.
    Regards.
    Satyaki De.

  • HOW TO START MAKING DATABASE USING ORACLE SQL PLUS in 10g?

    how will i create database using sql plus?
    does the code of sql applicable to it..?
    do i have to use the "create db <database name>", use and " create table also,.."
    pls help me..
    thanks

    At dos prompt :
    C:\>set ORACLE_SID=<your SID>
    C:\>sqlplus / as sysdba
    you get connected as sys user. Don't use this connection to create your own objects, create users instead.... but it would be useful to read some documentation, for example Starting SQL*Plus and manuals mentioned there.

  • I just watched a Netflix movie using my iPad 2. Now I need to know how to return the movie using my iPad 2 and deleting the movie from my queue?

    I just watched a movie using my iPad 2. Now I need to know how to return and delete the movie from my Netflix queue and account using the iPad 2?

    Perhaps this question would be better answered here:
    http://www.netflix.com/Help

  • How to iterate xml elements using PL/SQL

    Hello,
    Let's say I have the following xml:
    <A>
    <B name="b1">
    </B>
    <B name="b2">
    </B>
    </A>
    I would like to iterate over the B and sub-B elements using PL/SQL?
    Any help will be appreciated.

    Hi,
    You can use 'PL/SQL DOM API for XMLType (DBMS_XMLDOM)'
    to work with XML. You can check the example present at
    http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/appdev.920/a96620/xdb08pls.htm#1041419
    to check how it does.
    The API for the package DBMS_XMLDOM is given on the same page(http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/appdev.920/a96620/xdb08pls.htm#1040676)
    You can use them for your requirement.
    Regards,
    Anupama

  • How to send e-mail using PL/SQL

    I need to send e-mail using PL/SQL. Is it possible?
    Thanks in advance,
    Agnaldo

    Yes. Use the UTL_SMTP package

  • HOW TO CALL ANOTHER PAGE USING PL/SQL PDK?

    Hi,
    I am using pl/sql pdk to create portlets. When I need to call
    another page I am using wwpob_page.show(p_pageid) but instead it
    displays File Download wizard.
    Anyone knows workaroud for this?
    Are there any other ways to call other pages with portlets from
    pl/sql portlets?
    Thank you,
    ya

    Hello Yuri
    If you want to call any component of an application from PL/SQL
    you have to take a look to the manage of the component and then
    to Call Interface (Show), There you can see the way to call the
    component, but if you want to call a Page the way I found to do
    it, even thought it is not the best, was put an url like
    this /pls/portal30/url/page/PAGE_NAME on the link.
    I hope this could help you, if you dont understand please let me
    know and I'll give you a hand
    Ana Maria

  • How to create a Folder using a SQL Query?

    Hi
    How can I create a Folder (eg. C:\MyNewFolder) using SQL Query?

    Hi,
    I added some code in order to get the result from the xp_cmdshell command
    This returns null if successfull, if an error occurs returns the error message. May be useful instead of getting an sql error
    Code Snippet
    declare @cmdpath nvarchar(60), @Location nvarchar(100), @message nvarchar(max)
    set @Location = N'C:\Temp\Temp5'
    set @cmdpath = 'MD '+ @Location
    Create table #result
    result nvarchar(255)
    insert into #result (result) exec master.dbo.xp_cmdshell @cmdpath
    select @message = ISNULL(@message + ' - ','') + result from #result where result is not null
    select @message
    drop table #result
    Eralper
    http://www.kodyaz.com

  • How to return complex data to PL/SQL pkg from java running in JVM

    Hi, I don't know where could I post this question, so I post it here.
    In Oracle, we could create object as type, and can pass it to Java (powered by JDBC I guess, but I don't know how to, if some one know, please tell me where could get the good document to teach me about this), but is there any way could return complex data (maybe in Oracle Object Type) to PL/SQL (not using long & seperated by sign string / using middle table)?
    If you know, please tell me how to / tell me the url or book name for how to do this, thanks!

    with t as (
               select  1 id,'a' type_cd from dual union all
               select  1 id,'a' type_cd from dual union all
               select  1 id,'b' type_cd from dual union all
               select  2 id,'c' type_cd from dual union all
               select 33 id,'b' type_cd from dual union all
               select 33 id,'b' type_cd from dual union all
               select 33 id,'c' type_cd from dual union all
               select 33 id,'d' type_cd from dual union all
               select  5 id,'c' type_cd from dual union all
               select  5 id,'c' type_cd from dual
    select  id,
            type_cd
      from  (
             select  id,
                     type_cd,
                     count(distinct type_cd) over(partition by id) cnt,
                     row_number() over(partition by id,type_cd order by 1) rn
               from  t
      where type_cd = 'c'
        and cnt     = 1
        and rn      = 1
            ID T
             2 c
             5 c
    SQL>SY.

  • How to return multiples values useing functions

    Hi to all,
    I am using functions to return multiple values of two rows or multiple rows.
    For example emp id = 100 and i need to return the value for this(empid) input and output of this first_name and salary.
    I am tried in this way below but got errors (ORA-00932: inconsistent datatypes: expected NUMBER got HR.EMP_TYPE)
    create or replace type emp_type as object(first_name varchar2(20),salary number);
    create or replace function f1(empid in number)
    return emp_type
    as
    emp_record emp_type;
    begin
    select first_name,salary into emp_record.first_name,emp_record.salary from employees where employee_id = empid ;
    return emp_record;
    end;
    select f1(100) from dual;

    Sql is Sql and plsql is plsql. Though we can almost use all the sql objects inside a plsql code but vice versa is not always possible. Since plsql is tightly integrated with sql , if you return a number/date/varchar2 datatype values from plsql code to sql code,there is nothing wrong .Sql acknowledges this return type and knows well about how to handle it .But plsql record is a plsql specific datatype ,oracle was not built keeping in mind the fact that people will be creating difference types of records in plsql .So if you return a plsql datatype into a sql statement (which is processed by a sql engine) ,you need to tell oracle that I have written a plsql code which is going to return a record type so that sql engine can interpret it well.
    So all you need to do is create record in sql (known as object in sql ),when you make one, the entry is going to be shown in user_types views. Now use it like any other data type. I assume that the forum link provided in the above post is the best one to understand.
    Thanks,
    Rahul

  • How to get currency format using pl sql function

    Hi all,
    I am a newbee on the forum. currently i am facing an issue with the Format of Currency in an rdf report. This is a field of tax amount & i need to make some conditional formatting on this like if the tax amount is Zero then some static note is to be added before this field.
    I have tried a lot of functions on it like the one as below:
    IF :cp_org_id = 102
    AND :invoice_currency_code <> 'CAD'
    AND TO_CHAR (NVL (:cf_tax_amount, 0)) = 0
    THEN
    RETURN (TRUE);
    ELSE
    RETURN (FALSE);
    This is working fine in case of Zero tax amount But gets error out when there some Tax amount exists. It gives a VALUE ERROR in this format Trigger.
    Kindly suggest me how to solve this issue with right function. If possible then write the pseudo Code also.
    Thanks in advance
    D_Verma

    In addition to Satyaki:
    It might be a 'Reports Thing'.
    It works in SQL*Plus (although relying on implicit conversions is a bad idea, as mentioned):
    MHO%xe> begin
      2  IF 102 = 102
      3  AND 'DAC' != 'CAD'
      4  AND TO_CHAR (NVL (null, 0)) = 0
      5  THEN
      6  dbms_output.put_line('TRUE');
      7  ELSE
      8  dbms_output.put_line('FALSE');
      9  end if;
    10  end;
    11  /
    TRUE
    PL/SQL-procedure is geslaagd.
    MHO%xe> begin
      2  IF 102 = 102
      3  AND 'DAC' != 'CAD'
      4  AND TO_CHAR (NVL (0, 0)) = 0
      5  THEN
      6  dbms_output.put_line('TRUE');
      7  ELSE
      8  dbms_output.put_line('FALSE');
      9  end if;
    10  end;
    11  /
    TRUE
    PL/SQL-procedure is geslaagd.
    MHO%xe> begin
      2  IF 102 = 102
      3  AND 'DAC' != 'CAD'
      4  AND TO_CHAR (NVL ('0', '0')) = '0'
      5  THEN
      6  dbms_output.put_line('TRUE');
      7  ELSE
      8  dbms_output.put_line('FALSE');
      9  end if;
    10  end;
    11  /
    TRUE
    PL/SQL-procedure is geslaagd.

  • How to create a database using a SQL statement? Please help.

    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.25:1521:mydb","system","12345678");
    but mydb database does not exist.
    I want to make a connection to oracle server without database name.
    How can I do?

    Colleauge, what is the purpose of making a connection to a non-existent database.
    connections are made to the database to retrieve some data or put some data.
    for which the database should exists.
    so please create the mydb database first using Database Configuration Assistant (DBCA) which is much easier as it is GUI based rather than doing it with sql scripts.

Maybe you are looking for

  • Memory slots doesn't fit \ work on my iMac

    hello guys . ok shortly , a few weeks ago i just brought 2 slots of 4 GB memory for my iMac (Nov.2011) the memory i have order is this one : http://www.ebay.com/itm/330812064383?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m143 8.l2649 now the problem is t

  • DB Statistics on Line item dimension

    Hello,    We have a new cube with WBS element as line item dimension.  the cube has around 600,000 records in fact table.  The problem is the DB statistics is stuck at sampling the master data table for WBS element.  In all our cubes WBS element is a

  • Illustrator cs6 gradient mesh issue

    Trying to work with gradient mesh colouring the nodes and every few nodes I colour the selection stops working and i cant select the mesh. Doesn't matter if which selection tool I use or even the gradient mesh tool its still the same issue. I can see

  • Restoring Old Photos

    I know there are tons of information out there in Google. Frankly having to sift through all of that can be very tiedious as some joe blow thinks he has the right method or whatever and in truth there are better ways to do it. So Photoshop gurus what

  • Small Quicktime movies & music show as 'Q' icons - take FOREVER to load

    I have a site - joelplimmer.com (I created a re-direct - it's my iWeb .Mac site really) and the Quicktime content is taking forever to load - it USED to load fairly quickly - I have gone into 'package contents' in my 'domain' file in application supp