Newbie: What is Oracle Version of T-SQL stored procedure?

How do I achieve this in PS/SQL? I find that Oracle is worlds more difficult than SQL Server/T-SQL? I simply want to design a package and package body that returns a record for each cash register in a store. containing Week-to-date sales, year-to-date for lLast Year, and YTDSales for CurrentYear. These last 2 values should be returned as a table from a function: Here is the pseudocode'ish: I think I will be able to use this as a template for most of the PL/SQL I have to design:
CREATE PROCEDURE spGetWTDandYTDSales
(@drawerid as integer,
     @startDate as timestamp,
     @endDate as timestamp,
@recordsetOfAmounts Values output)
BEGIN
select fncWTDSales ((@drawerid, @startdate, @enddate) as wtdAmount,           
fncYTDSales(@drawerid, @startdate, @enddate) as YTDAmount1
fncYTDSalesLY(fncYTDSales(@drawerid, @startdate, @enddate) as YTDAmount2
return @recordsetOfAmounts
END ;
CREATE FUNCTION fncWTDSales(@drawerid, @startdate, @enddate)
as money
BEGIN select amount from CashDrawer where drawerid = @drawerid and start_date between @startDate and @enddate
return amount;
END
CREATE FUNCTION fncYTDSales(@drawerid, @startdate, @enddate)
as table
BEGIN
select ytdsales as ytdsales, ytdSalesLY as ytdSalesLY
from CashHistory
where drawerid = @drawerid
from CashDrawer
where drawerid = @drawerid and start_date between @startDate and @end_date
return ytdsales, ytdSalesLY;
END
Clear as mud? Also since several procedures and functions within the package will use the drawerid, startdate and enddate variables, how can i make these global to the package (and/or should I) so i don't have to define as parameters to procedures or functions.
Thanks
Rod

You guys are great. Justin's was the clearest answer. How do I givepoints? Here is some background and hopefully my last question:
How do I get rid of the function since a bad idea? (I HOPE I didn't leave anything out)
Background
I came into a job where there was a reporting software package going against an oracle database of generic fields. The company has a CSV table of how these fields are mapped. The reports are written in VB6 code with DLLs and the like. The reports are written like: For each of the 19 fields on report, make a database call via a Simple select statement to get the data. There are no indexes. I copy/pasted the DDL from Oracle Ent. Mgr. to Word Document, it is 4 pages. I’m not making any of this up.
I’ve done a replace on the field names so as to not identity the software package but here’s some of the structures used to solve my problem.:
CREATE  TABLE  SALESTABLE,
                BusinessDate  DATE  NOT  NULL,
                StoreId,
                FIELD8 ,
                FIELD53,
                FIELD54
SELECT  StoreId as store,
            SUM(field8) AS WTDALLSALES,
     SUM(field53) AS WTDCARS,
     SUM(field54) AS WTDSECONDS,
     MYSTORE.GetGuestCount(221, '01-MAY-2008', '08-MAY-2008') AS WTDGuestCount,
               MYSTORE.GetGuestCount(221, '01-MAY-2007', '08-MAY-2007') AS WTDGuestCountLY,
               MYSTORE.GetGuestCount(221, '01-JAN-2008', '01-MAY-2008') AS YTDGuestCount,
               MYSTORE.GetGuestCount(221, '01-JAN-2007', '08-MAY-2007') as YTDGuestCountLY
FROM MYSTORE.SALESTABLE
WHERE StoreId in (243,321,251,363,501)
     AND BusinessDate between '01-MAY-2008' and '25-MAY-2008'
GROUP BY StoreIdMY GUESTCOUNT FUNCTIONCREATE OR REPLACE  FUNCTION  GETGUESTCOUNT
         storeid               IN number,
     startDate          IN date,
     endDate          IN date)
return number
AS
     guestCount     number;
BEGIN
     SELECT SUM(Field82  + Field83 + field84)
     INTO GuestCount
     from MYSTORE.SALESTABLE     where StoreId= storeid
        and  BusinessDate between startdate and enddate;
    return guestcount;
END GETGUESTCOUNT;Here is a portion of the vendor's DDL for the Sales Tables (just to show how confusing name is) which I have cleaned up for this post: (My company has a table of what these fields map to. )
    NULL, "FIELD94" NUMBER DEFAULT 0 NOT NULL, "FIELD95"
    NUMBER DEFAULT 0 NOT NULL, "FIELD96" NUMBER DEFAULT 0 NOT
    NULL, "FIELD97" NUMBER DEFAULT 0 NOT NULL, "FIELD98"
    NUMBER DEFAULT 0 NOT NULL, "FIELD99" NUMBER DEFAULT 0 NOT
    NULL, "CONF_STR1" VARCHAR2(50 byte), "CONF_STR10" VARCHAR2(50
    byte), "CONF_STR11" VARCHAR2(50 byte), "CONF_STR12"
    VARCHAR2(50 byte), "CONF_STR13" VARCHAR2(50 byte),
    "CONF_STR14" VARCHAR2(50 byte), "CONF_STR15" VARCHAR2(50
    byte), "CONF_STR16" VARCHAR2(50 byte), "CONF_STR17"
    VARCHAR2(50 byte), "CONF_STR18" VARCHAR2(50 byte),
    "CONF_STR19" VARCHAR2(50 byte), "CONF_STR2" VARCHAR2(50 byte),
    "CONF_STR20" VARCHAR2(50 byte), "CONF_STR3" VARCHAR2(50 byte),
    "CONF_STR4" VARCHAR2(50 byte), "CONF_STR5" VARCHAR2(50 byte),
    "CONF_STR6" VARCHAR2(50 byte), "CONF_STR7" VARCHAR2(50 byte),
    "CONF_STR8" VARCHAR2(50 byte), "CONF_STR9" VARCHAR2(50 byte),
    "STOREID" NUMBER NOT NULL, "IS_APPROVED" NUMBER NOT
    NULL, "IS_POSTED" NUMBER NOT NULL, "PRIMARY_KEY" NUMBER NOT
    NULL, "SAVE_NO" NUMBER NOT NULL, "IS_ARCHIVED" NUMBER DEFAULT
    0,
    CONSTRAINT "SYS_C002502" PRIMARY KEY("PRIMARY_KEY")
    USING INDEX 
    TABLESPACE "ERSINDEX"
    STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
    TABLESPACE "ERS" PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255
    STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0)
    LOGGINGEdited by: user651380 on May 18, 2009 9:16 AM Corrections made

Similar Messages

  • How to write a PL/SQL stored procedure in Oracle to call Webservice

    Can any one pelase send me a code on how to write a PL/SQL stored procedure in Oracle database to call the Webservice ?
    Thanks,
    Rajesh

    Were you able to solve this problem

  • Migrating Transact SQL Stored Procedure & Funtions  to Oracle 9i Procedures

    Is it possible to Migrate Transact SQL Stored Procedure & Funtions in MS-SQL to Oracle 9i Procedures & Funtion . I am an Bigginer in Oracle and SQL.Is their any tool available for this?

    This feature is currently available in the Oracle Migration Workbench. with the Microsoft SQL Server plugins.
    Have you tried it?
    Regards,
    Niall

  • Calling ORACLE/SQL stored procedure...

    Hello,
    Is it possible to invoke non-parametrized Stored Procedures (a procedure that, neither having IN parameter nor OUT parameter) from BizTalk.?
    Any suggestion/solution?
    Thanks,
    Prajakt.
    Praj Dixit

    Praj,
    Yes possible.
    Create a .NET helper which will call the stored procedure and handle the return value/recordset from sp and in your BizTalk artifacts call this .NET helper/wrapper to SQL stored procedure. 
    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

  • Very Odd PL/SQL Stored Procedure Behavior

    I'm writing a jsp/struts front-end for a legacy app that makes extensive use of stored procedures. I've sucessfully created a login page, a search page, and a master record detail/edit page. On the master record detail there are a series of subordinate data grids, each with links to individual pages for record editing.
    If I edit the master record and click my save button (a commit action), the appropriate stored proc is called and everything works as it should.
    BUT, if I click on the edit link to a subordinate table, I am taken to the screen, I can make changes, and when I click save (another commmit event) the stored procedure for that table is not called. No errors, the struts action takes me back to the previous screen (correctly), but nothing is saved.
    The weird part is, once I've returned to the master record page, if I edit the master record and click the same save button as before, the stored procedure for the subordinate table that I had just looked at is fired.
    I know my struts actions are correct, since the pages navigate correctly (at least, I 'think' I know that). I used the same code in the EO Impl to set up my call to the stored procs.
    Does anybody have ANY idea what might be causing this? I'm lost and confused at this point.
    (EO Impl Code below)
    /*doesn't print dodml until I click save on the master record...this is the code for the child. */
    protected void doDML(int operation, TransactionEvent e)
    System.out.println("dodml");
    switch (operation) {
    case DML_INSERT: {
    callInsertExternalNumber("I");
    break;
    case DML_UPDATE: {
    callInsertExternalNumber("U");
    break;
    void callInsertExternalNumber(String function) {
    CallableStatement st = null;
    try {
    System.out.println("calling stored proc");
    String stmt = "BEGIN mySchema.InsertNumber(?,?,?,?,?,?,?); END;";
    DBTransaction tr = getDBTransaction();
    st = tr.createCallableStatement(stmt,1);
    if (getExternalKey() != null) {
    st.setLong(1,getExternalKey().longValue());
    ...etc. etc. The calling stored proc doesn't get printed until I click save on the master record.

    Hi
    you could use JPublisher Wizard in JDeveloper to generate Java Wrapper classes for pl/sql stored procedures.
    check out the online demos http://technet.oracle.com/products/jdev/info/jdev/jpublisher/s000.html
    Also there is information in the online doc.
    Check the release notes for supported database versions.
    raghu

  • Unable to use the values returned by a PL/SQL stored procedure in a XSQL page

    Hi,
    I've been messing around with XML and XSQL in particular. I was trying to write a xsql page to display a report with account totals...I have the following .xsql which calls a PL/SQL stored procedure :
    <?xml version="1.0"?>
    <xsql:query connection="pfcdm" xmlns:xsql="urn:oracle-xsql">
    <xsql:set-session-param name="zasset_total" value="100">
    <xsql:dml connection="pfcdm">
    rraman.sp_vw_id(zasset_total,zinvm_total,zmkt_val);
    </xsql:dml>
    </xsql:set-session-param>
    select 'Asset total is {@zasset_total}' as "ASSET_TOTAL" from dual
    </xsql:query>
    My procedure sp_vw_id returns the values that it should. But, I am not sure how to declare variables within a page, and to output the return values. There is very scanty documentation on the usage of <xsql:dml> or <xsql:ref-cursor-function>.
    Any response would be greatly appreciated.
    Thanks,
    Raja

    Here is the example from the Oracle9i (complete rewrite) of the XSQL Chapter in our Oracle documentation.
    Question
    I using <xsql:dml> to call a stored procedure which has one OUT parameter, but I was not able to see any results. The executed code results in the following statement:
    <xsql-status action="xsql:dml" rows="0"/>
    Answer
    You cannot set parameter values by binding them in the position of OUT variables in this release using <xsql:dml>. Only IN parameters are supported for binding. You can create a wrapper procedure that constructs XML elements using the HTP package and then your XSQL page can invoke the wrapper procedure using <xsql:include-owa> instead.
    For an example, suppose you had the following procedure:
    CREATE OR REPLACE PROCEDURE addmult(arg1 NUMBER,
    arg2 NUMBER,
    sumval OUT NUMBER,
    prodval OUT NUMBER) IS
    BEGIN
    sumval := arg1 + arg2;
    prodval := arg1 * arg2;
    END;You could write the following procedure to "wrap" it, taking all of the IN arguments that the procedure above expects, and then "encoding" the OUT values as a little XML datagram that you print to the OWA page buffer:
    CREATE OR REPLACE PROCEDURE addmultwrapper(arg1 NUMBER, arg2 NUMBER) IS
    sumval NUMBER;
    prodval NUMBER;
    xml VARCHAR2(2000);
    BEGIN
    -- Call the procedure with OUT values
    addmult(arg1,arg2,sumval,prodval);
    -- Then produce XML that encodes the OUT values
    xml := '<addmult>'&#0124; &#0124;
    '<sum>'&#0124; &#0124;sumval&#0124; &#0124;'</sum>'&#0124; &#0124;
    '<product>'&#0124; &#0124;prodval&#0124; &#0124;'</product>'&#0124; &#0124;
    '</addmult>';
    -- Print the XML result to the OWA page buffer for return
    HTP.P(xml);
    END;This way, you can build an XSQL page like this that calls the wrapper procedure:
    <page connection="demo" xmlns:xsql="urn:oracle-xsql">
    <xsql:include-owa bind-params="arg1 arg2">
    BEGIN addmultwrapper(?,?); END;
    </xsql:include-owa>
    </page>This allows a request like:
    http://yourserver.com/addmult.xsql?arg1=30&arg2=45
    to return an XML datagram that reflects the OUT values like this:
    <page> <addmult><sum>75</sum><product>1350</product></addmult>
    </page>

  • PL/SQL Stored procedures vs C# code.

    Hi All
    We are going to start designing a kind of transactional application with huge volume of data (150 million records per month). Our selected DB engine is Oracle 10.g while C# is selected development language.
    Because of big volume of data performance is one of the most important factors for us, and the technical design should gain the best level of performance.
    What i'm looking for and studing for it is to define which kind of operation shall be done by Stored Procedure which will be written by PL/SQL or by C# classes?
    I don't interested in to handle complicated and complex jobs using PL/SQL stored procedures while the performance really deserve it.

    Hello,
    Well, my philosophy is to leverage the database as much as possible. I have worked with applications that had no "select", "insert", "update" or "delete" statements in them. Instead, stored procedures and functions inside of PL/SQL packages and bodies were used. Some people will argue strongly against that, but I belong to the "thick database" group rather than the "the database is just a persistence layer that I have to deal with" group. To me it makes sense to co-locate the code that works on the data with the data. If you are working with large volumes of data, I find the bulk operations available via PL/SQL to be very handy.
    Here's an AskTom thread that deals with this general issue:
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:12083187196917
    Whilst the thread is primarily about Java, you can substitute just about any other language and the meaning will still carry over.
    Regards,
    Mark

  • Creating XML report using PL/SQL Stored Procedure

    Hi Friends,
    I am working on an xml report with the xml source as PL/SQL Stored Procedure.
    I am referring the exercise shown in the following link to understand the process:
       http://orclapp.blogspot.com/2012/02/developing-xml-publisher-report-using.html
    In the example shown in the above link I could not understand the following:
    1) In the following procedure, the out parameter 'retcode' is not used at all.
       What is the importance of this parameter.
        PROCEDURE REPORT (errbuf  OUT VARCHAR2, retcode  OUT VARCHAR2, p_product_id   IN     NUMBER)
    2)  After the xml data is prepared and put to 'l_result' Clob variable, the following
        Loop is executed. I am not able to appreciate why the following loop is required.
         LOOP
             EXIT WHEN l_length = l_retrieved;
             IF (l_length - l_retrieved) < 32000
             THEN
                SELECT SUBSTR (l_result, l_retrieved + 1) INTO l_xmlstr FROM DUAL;
                l_retrieved := l_length;
                fnd_file.put_line (fnd_file.output, l_xmlstr);
             ELSE
                SELECT SUBSTR (l_result, l_retrieved + 1, l_offset)
                  INTO l_xmlstr
                  FROM DUAL;
                l_retrieved := l_retrieved + l_offset;
                fnd_file.put_line (fnd_file.output, l_xmlstr);
             END IF;
         END LOOP;
    3) In the example it is not explained how the concurrent program gets the xml data?
       I assume it is written to a file using the following line of code:
        fnd_file.put_line (fnd_file.output, l_xmlstr);
       I would appreciate if anyone can throw some light into my above queries so that I can understand the process clearly.
    Thanks & Regards
    Hawker

    Hi 32000 in the code is a 'safe' size smaller than the max available 32767, the loops purpose is to move through the entire thing in chunks that will be manageable in the limits of the data type.
    Btw; if you are in Oracle e-business suite then you can also use Oracle reports very simply to create XML output.
    If you have reports developer all you need to do is put raw sql (without any 'artifice' to create XML) in the report SQL and then set the reports output to XML in the program definition in Oracle e-business.
    best regards,
    Robert.

  • PL/SQL stored procedure?

    Hi,
    Is any body could help me to execute
    an PL/SQL stored procedure via JDev3.1
    (using Oracle conection, No JDBC).
    Please provide sample code if possible?
    Thanks in Advance.
    Reza

    Hi
    you could use JPublisher Wizard in JDeveloper to generate Java Wrapper classes for pl/sql stored procedures.
    check out the online demos http://technet.oracle.com/products/jdev/info/jdev/jpublisher/s000.html
    Also there is information in the online doc.
    Check the release notes for supported database versions.
    raghu

  • Error calling PL/SQL stored procedure

    Hi,
    I'm pretty new to JDeveloper having used NetBeans for the last few years.
    I'm getting an error when trying to call a PL/SQL stored procedure. When I click on any of the oracle errors I get an "unable to find source file" message. The errors occurs in call.execute(). The error message and Java code are listed below. Any help is much appreciated.
    Cheers,
    Stevie
    Errors:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 33
         at java.lang.String.charAt(String.java:558)
         at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:877)
         at oracle.jdbc.driver.OracleSql.parse(OracleSql.java:811)
         at oracle.jdbc.driver.OracleSql.getSql(OracleSql.java:284)
         at oracle.jdbc.driver.OracleSql.getSqlBytes(OracleSql.java:538)
         at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:169)
         at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:873)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1161)
         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)
         at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3093)
         at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4286)
         at oracle.CallPLSQL.callLMO(CallPLSQL.java:118)
         at oracle.TestHarness.main(TestHarness.java:18)
    Jave Code:
    package oracle;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Types;
    public class CallPLSQL {
    private Connection conn;
    public CallPLSQL() {
    *Constructor.
    try {
    //Register Oracle Database Drive
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    //set connection
    String connectionString="jdbc:oracle:thin:TSD/TSD@DEV:1526:DEVELOP";
    this.setConn(DriverManager.getConnection(connectionString,"TSD", "TSD"));
    } catch (SQLException ex) {
    public int callproc () throws SQLException {
    CallableStatement call;
    String callString = "{call proc" +
    call = conn.prepareCall(callString);
    call.setInt(1, 120289);
    call.setInt(2, 2008);
    call.registerOutParameter(3, Types.INTEGER);
    call.registerOutParameter(4, Types.INTEGER);
    call.registerOutParameter(5, Types.INTEGER);
    call.registerOutParameter(6, Types.DATE);
    call.registerOutParameter(7, Types.VARCHAR);
    call.registerOutParameter(8, Types.INTEGER);
    call.registerOutParameter(9, Types.INTEGER);
    call.execute();
    int i = call.getInt("app_id");
    return i;
    public void setConn(Connection conn) {
    this.conn = conn;
    public Connection getConn() {
    return conn;
    }

    I've fixed it now. I'd missed a } in prepareCall. What a doughball.

  • Pass date range parameter  to SQL stored procedure.

    Hi,
    I'd like to pass a date range parameter from Crystal Reports to a sql stored procedure. Does anyone know if this is possible?
    I've had no problem passing standard datetime (single value) paramaters to and from but am struggling with getting a range value parameter to work.
    Environment: Crystal Reports 10/XI and SQL 2000 MSDE version or SQL 2005 Express Edition.
    Any help would be appreciated.

    C5112736 wrote:>
    > And then these 2 formulas 'Formula # 1' and 'Formula # 2' can be used to pass on to the stored procedure.
    Can someone please demonstrate exactly how to use formula results as date parameters to a SQL stored procedure?  Keep in mind, there are two parameters to the stored procedure.
    I have gleaned this much: Use Add Command and insert the procedure with
    EXEC ServerName.dbo.usp_sprocName;1 '{?StringParameter}'
    but if I try to do
    {CALL ServerName.dbo.usp_SprocName({@Formula1},{@Formula2})}
    then it gives the error "No value given for one or more required parameters". 
    Both of the parameters are VARCHAR(50).
    I have finally found this link: [http://msdn.microsoft.com/en-us/library/ms710248(VS.85).aspx|http://msdn.microsoft.com/en-us/library/ms710248(VS.85).aspx]
    This Microsoft site defines the format of the ODBC escape sequences, but I still do not know how to convince Crystal to insert it's parameter results or formula results.
    Pulling what's left of my hair out . . .
    ~ Shaun

  • How to get name of PL/SQL stored procedure being executed?

    When executing a PL/SQL stored procedure, is there a way to extract the name of the procedure programatically?
    (Similar to the way an Oracle Form can retrieve it's own name via GET_APPLICATION_PROPERTY(CURRENT_FORM_NAME). )
    Thanks

    Here is one sample ->
    satyaki>
    satyaki>select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
    PL/SQL Release 10.2.0.3.0 - Production
    CORE    10.2.0.3.0      Production
    TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    Elapsed: 00:00:00.17
    satyaki>
    satyaki>
    satyaki>CREATE OR REPLACE PROCEDURE error_test1 AS
      2  BEGIN
      3       dbms_output.put_line(dbms_utility.format_call_stack);
      4  END error_test1;
      5  /
    Procedure created.
    Elapsed: 00:00:06.45
    satyaki>
    satyaki>
    satyaki>exec error_test1;
    ----- PL/SQL Call Stack -----
      object      line  object
      handle    number  name
    1D609C14         3  procedure SCOTT.ERROR_TEST1
    1D5A89B8         1  anonymous block
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.21
    satyaki>
    satyaki>Regards.
    Satyaki De.

  • Big PL/SQL stored procedure optimization.

    Hi There,
    Can any one let me the basic steps for optimization or tuning of a PL/SQL stored procedure for better performance.
    DB: 11.2.0
    OS: Solaris 10
    looking forward.
    Regards,

    >
    Can any one let me the basic steps for optimization or tuning of a PL/SQL stored procedure for better performance.
    >
    Seriously - how do you expect anyone to give you any specific things to do when you don't provide any specific information about your procedure?
    A procedured is comprised of one or more steps. So to tune it you need to determine which steps are 'slow' and make them 'fast'! ;)
    There are several common causes of performance problems with PL/SQL are:
    1. Using PL/SQL when SQL should have been used. Don't use PL/SQL to begin with - always use SQL unless it just can't do the job required. The 'PL' in PL/SQL means 'Procedural Language' and should be used for transactional (multi-step) processing or when 'procedural' operations are needed that aren't available in SQL.
    2. Using slow-by-slow (row by row) processing instead of BULK processing.
    3. Using multiple nested LOOPs when a more complex query could have allowed a single loop to be used.
    4. Using COMMITs more frequently than required. Search this forum and you will find far too many questions about how to do a COMMIT after 10,000 rows (or some other number). A COMMIT should be performed AFTER a transaction has been completed, not during the middle of it. Frequent commits generally use more resources, degrade performance and risk the famous 'snapshot too old' message.
    The very first step of performance 'tuning' is to first verify that any 'tuning' is even required. Too many people suffer from CTD - compulsive tuning disorder.
    The second step is to identify what step, or steps, of the process are performing below par.
    Which means the best developers are proactive - they plan ahead.
    1. Create an explain plan BEFORE the code goes to production. Once the code has been tested and believed to perform properly an execution plan should be created and SAVED for future reference. That saved plan can then be used later, when you suspect a performance issue, to detect changes that might have affected performance: create a new plan and compare it to the baseline.
    2. Create explains for ALL key queries. As suggested by step #1 performance is all about comparison: performance 'now' COMPARED TO performance 'then'. If the don't know the performance 'then' it can be difficult to know if the performance has changed. If a query has a 'now' execution time of 2 minutes is that 'fast' or 'slow'? Well - compared to WHAT? You can't know 'fast' or 'slow' if you don't know 'then' and 'now'. How fast was it yesterday, last week or last month?
    3. Instrument your procedural code. That means measure, for EACH STEP, how long it took to execute and how much data it worked with. That information needs to be logged. Your logging and data collection can be static (it ALWAYS happens) or dynamic. Oracle's own code is HEAVILY instrumented. Some operations and activity are always logged and available in the data dicitionary views or various performance reports such as AWR.
    Other operations, such as the extended trace facility, only collect data on request.
    IMHO your first step should be to begin the 'proactive' steps above.

  • How to bind arrays to PL/SQL stored procedure using OCI?

    Hi,
    We are having problems trying to bind arrays to PL/SQL stored procedure using OCI. Here is the situation:
    - We have a stored procedure called "GetVEPFindTasks" with the following interface:
    PROCEDURE GetVEPFindTasks (
    p_ErrorCode OUT NUMBER,
    p_ErrorMsg OUT VARCHAR2,
    p_RowCount OUT NUMBER,
    p_VEPFindTasks OUT t_VEPFindTaskRecordTable,
    p_MaxTask IN NUMBER);
    t_VEPFindTaskRecordTable is a record with the following entries:
    TYPE t_VEPFindTaskRecord IS RECORD (
    RTCID NUMBER,
    TransNum NUMBER,
    TransTimestamp VARCHAR2(20),
    Pathname1 image_data.pathname%TYPE,
    Pathname2 image_data.pathname%TYPE,
    Pathname3 image_data.pathname%TYPE,
    OperatorID operator.id%TYPE);
    - Now, we are trying to call the stored procedure from C++ using OCI (in UNIX). The call that we use are: OCIBindByName and OCIBindArrayOfStruct to bind the parameters to the corresponding buffers. We bind all parameters in the interface by name. Now, we do bind the record's individual item by name (RTCID, TransNum, etc.), and not as a record. I don't know if this is going to work. Then, we use the bind handles of the binded record items (only record items such as RTCID, TransNum, and NOT error_code which is not part of the record) to bind the arrays (using OCIBindArrayOfStruct).
    All of the parameters that are binded as arrays are OUTPUT parameters. The rest are either INPUT or INPUT/OUTPUT parameters. Now, when we try to execute, OCI returns with an error "Invalid number or types of arguments" (or something to that sort... the number was something like ORA-06550). Please help...
    Is there any sample on how to use the OCIBindArrayOfStruct with PL/SQL stored procedures? The sample provided from Oracle is only for a straight SQL statement.
    Thank's for all your help.
    ** Dannil Chan **

    As you said:
    You have to pass in an array for every field and deconstruct/construct the record in the procedure. There is no support for record type or an array of records. Can you give me a example? I'am very urgently need it.
    thanks
    email: [email protected]

  • How to send a Varying Array param to a PL/SQL Stored Procedure from Java

    * I am VERY new to jdbc, and even somewhat new to Java
    * I'm using Java 1.5, Oracle 10g.
    * I need to call the following PL/SQL Stored Procedure from Java:
    procedure setEventStatus
    i_deQueueStatus in deQueueStatus_type
    *deQueueStatus_type is the following (an array of deQueueStatus_OBJ):
    CREATE OR REPLACE TYPE deQueueStatus_OBJ as object
    eventID number (20),
    dequeuestatus varchar2(20)
    CREATE OR REPLACE TYPE deQueueStatus_TYPE IS VARYING ARRAY(500) of deQueueStatus_obj
    *I have created a Java object as follows:
    public class EventQueueDeQueueStatus
         long      eventID;
         String      dequeueStatus;
         EventQueueDeQueueStatus(long eventID, String dequeueStatus)
              this.eventID = eventID;
              this.dequeueStatus = dequeueStatus;
    I have an ArrayList of these.
    I need to pass this list to the Stored Procedure. How do I create a java.sql.Array so I can call CallableStatement.setArray to set the parameter? Or do I use something else? I have tried setObject with both the ArrayList and also with a primitive array, but got "Invalid Column Type" both times.
    Any help would be greatly appreciated. I just got this task today, and I have to make it work by Tuesday :-( !
    Thanks,
    Kathy

    Kathy,
    Search the archives of this forum and the JDBC forum for the terms STRUCT and ARRAY and you can find some sample code on the JDBC How-To Documents page and the JDBC Samples which can both be accessed from this page:
    http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
    Good Luck,
    Avi.

Maybe you are looking for

  • I simply want to know how to turn off iCloud* without losing my contacts

    Call me old fashioned, but I really do NOT want to use iCloud EXCEPT for ONE THING*: and that's to find my phone, ipad or laptop if it goes missing. Having said that, I have figured out how to turn off icloud on my ipad and my iphone (I am not using

  • USB interface of WRT160NL is slow?

    I connected a WesternDigital 1TB USB 2.0 hard drive to my WRT160NL's USB port; and connected my PC to the WRT160NL via Ethernet cable. I can detect and configure the hard drive without any problem. But the read/write speed to the USB disk is very slo

  • Tricky query with multiple hierarchial sub queries

    Here's a pussle that I cannot solve. Who can help me? Given table F (records form a binary tree with levels 0, 1, and 2): Id IdParent F1 null F2 F1 F3 F2 F4 F2 F5 F1 F6 F5 F7 F5 and given table D (records form a similar binary tree with levels 0, 1,

  • Problem with RmiJdbc type 3 driver

    I used RmiJdbc type3 driver for connecting to a remote access database and import it's data.Problem is that- After starting rmi server and tomcat servers I am able to import data from remote access database but when I try again to import data second

  • What K7D (-L) Master motherboard versions are there?

    For the K7D (-L) Master, dual Athlon cpu series, what are the actual motherboard revisions or versions, that were made, and what is the very latest? I'm not talking about the bios, but the physical motherboard. People always seem to mix those two up.