HELP!! Stored Procedures - Adding and Inserting Records

Can ANYONE tell what I'm doing wrong? I'm learning PL/SQL, and I don't know what I'm missing here.
For starters, I'm trying to write a stored procedure to:
-- insert data into a NULL column added using ALTER TABLE
-- there's about +/- 45 records where this data needes to be added.
-- the value for each null field in the column is a random value (that is, generated using dbms_random.random
I've tried several ways to write the procedure, but have run against a wall to determine what I'm missing.
Here's the SQL statements and the error messages:
SQL> CREATE OR REPLACE PROCEDURE update_proj_number (p_proj4_id IN VARCHAR2)
2 AS
3 BEGIN
4 DECLARE
5 v_counter NUMBER(5) := 0;
6 END;
7 BEGIN
8 v_counter := 0;
9 dbms.random.initialize(32768);
10 v_counter := v_counter + 1;
11 p_proj4_id := dbms.random.random
12 UPDATE sample_trades
13 SET proj4_id = RANDOM(p_proj4_id);
14 exit when NOTFOUND%;
15 END;
16 /
Warning: Procedure created with compilation errors.
SQL>
SQL> SHOW ERRORS
Errors for PROCEDURE UPDATE_PROJ_NUMBER:
LINE/COL ERROR
6/2 PLS-00103: Encountered the symbol "END" when expecting one of the following:
begin function package pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> cursor form current
12/3 PLS-00103: Encountered the symbol "UPDATE" when expecting one of the following:
. ( * @ % & = - + ; < / > in mod not rem an exponent (**)
<> or != or ~= >= <= <> and or like between is null is not &#0124; &#0124; is dangling
The symbol ";" was substituted for "UPDATE" to continue.
14/22 PLS-00103: Encountered the symbol ";" when expecting one of the following:
( type <an identifier> <a double-quoted delimited-identifier>
SQL>
Would it be more efficient to use a cursor to fetch the rows containing the null value or is a stored procedure OK for this?
Also, I would like to have a second example of a stored procedure that will add random rows to a table (that is, create duplicates of information already in the table). This stored procedure will also use dbms_random.
For example,
IF p_value1 = 'FIRST_VALUE' then
add this record (incl. random_val for key);
ELSIF p_value = 'SECOND_VALUE' then
add that record (incl. random_val for key);
and on and on.
Much thanks to anyone who can help.
For example,
null

Try this
CREATE OR REPLACE PROCEDURE update_proj_number (p_proj4_id IN VARCHAR2)
AS
v_counter NUMBER(5) := 0;
BEGIN
v_counter := 0;
dbms.random.initialize(32768);
v_counter := v_counter + 1;
p_proj4_id := dbms.random.random ;
UPDATE sample_trades
SET proj4_id = RANDOM(p_proj4_id);
END;
/

Similar Messages

  • Help: Stored procedure related problem: passing record data to a parameter?

    I am working a form and block A is based on a stored procedure. Assuming it contains customer information and in a tab form contains 20 customer's info. When the mouse cursor pointing to any one of the record, I'd like to pass the record, just one info to a parameter list. It is like: in a when_mouse_click
    :parameter.customer_name := :a.customer_name etc.,
    Thank you in advance.
    Jimmy

    Nobody can guess what your are doing and what error you are facing. You need to provide more details, like the code, calling method and the exact error message.
    Use tag to post your code.                                                                                                                                                                                                                                                                                                                                                                                                       

  • Help: Using stored procedure to add new record in DB

    I am using stored procedures for a form. In DB, I have select and update procedures work without problems. However, for the insert procedure, it does not seem work right. Here is how things work for the insert procedure:
    1. On the form, I have an add record button, when this button is pressed, it calls the trigger "KEY_CREREC" with "create_record."
    2. A blank record is then shown on form. I then put in some test date. Apparently, this will cause "SYSTEM.STATUS" set to "CHANGED." when calling for commit, it only calls the DB update procedure.
    My question is how to make it call the insert procedure.
    Any suggestions are greatly appreciated.

    I just added to lines in key_commit to check the system.form_status:
    set_alert_property('AL_STOP', alert_message_text,'System Status: '||:system.form_status);
    al_button := show_alert('AL_STOP');
    After do_key('create_record') and some changes in fields, the :system.form_status shows "CHANGED.'
    Just wondering what will make the auto generated insert_procedure for the block to trigger. So far, no problems to do query and update with the DB stored procedure, but the insert does not seem working.
    Any help is greatly appreciated.
    P.S. The new post might be more clear:
    http://forums.oracle.com/forums/thread.jspa?threadID=675578&tstart=0
    Message was edited by:
    WJH

  • How to execute an Oracle stored procedure which returns many records?

    I have two synchronous scenarios XI<->PI<->JDBC, where JDBC is receiver adapter.
    Each scenario runs a different stored procedure in Oracle database.
    The first stored procedure returns only one record, the second stored procedure returns many records, which come from a cursor.
    In the first scenario I executed the stored procedure following the directions of Help SAP page and works perfectly.
    Link: [http://help.sap.com/saphelp_nw70/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm]
    <root>
      <StatementName5>
        <storedProcedureName action=u201DEXECUTEu201D>
          <table>realStoredProcedureName</table>
          <param1 [isInput=u201Dtrueu201D] [isOutput=true] type=SQLDatatype>val1</param1>
        </storedProcedureName>
      </StatementName5>
    <root>
    I have sought in the forums of SDN and cannot find the way to run the second stored procedure, and receive the information it returns.
    Thank you for your help.
    Rafael Rojas.

    Think It doesnt matter either cursor or result set. Try to get the response back from JDBC and see what are the fields it exactly populating.
    In Procedure you can able to find the columns selecting in Cursors. Give those columns in the DT.
    File - JDBC (Execute-- Procedure)
    To get the response
    JDBC_respose -  File
    Correct me if im wrong.
    Regards
    Ramg

  • Help: stored procedure for oracle forms

    Hi,
    I am working on a form with data block based on stored procedures. Here is the question:
    On a data block based on simple query, where insert a new record is taking care of by oracle form. That is create_record will do the job.
    When the data block is based on stored procedures, select, update, insert and delete will have to based on the data block created by the ref curcor. How to call the stored procedure from form to create a new record?
    I attempted to write something like:
    PROCEDURE sample_insert
    data_block IN OUT some_refcurcor) IS
    BEGIN
    insert into some_table values
    (data_block.field1, data_block.field2.....);
    commit;
    END;
    I am not quit sure how this works, as would create_record buildin will work to clean up the FORM data block and allow user to enter data and when and how the sample_insert will be called to make this work? Or how the same effect will work out as none stored procedure would do. New data eventually get into the designated table.
    Any suggestions are greatly appreciated.
    Jimmy
    Correction: (data_block IN OUT some_refcurcor) should be (data_block IN OUT some_table) and some_table is a record type etc..
    Message was edited by:
    WJH

    Hello,
    there are two kinds of output from a stored procedure which can be used in a forms block:
    - ref cursor
    - table of records
    The easiest way is to use a ref cursor. Use a strongly typed one,
    so that you can see the columns in the block wizard.
    A table of records is used when you also want to insert, update and so on.
    There is a not on metalink note for this ( 66887.1 ).
    Bernd

  • Calling of Stored Procedure in After Insert Trigger

    Can I call a Stored Procedure in After Insert Trigger ?
    Please send a sample code (good example) of After Insert Trigger.
    Thanks.

    Kishore,
    I have two table WLCS_ORDER, WLCS_ORDER_LINE
    WLCS_ORDER - It holds order header information like
    ORDER_ID
    CUSTOMER_ID
    TRANSACTION_ID
    STATUS
    ORDER_DATE
    SHIPPING_METHOD
    SHIPPING_AMOUNT
    SHIPPING_CURRENCY
    PRICE_AMOUNT
    PRICE_CURRENCY
    SHIPPING_GEOCODE
    SHIPPING_STREET1
    SHIPPING_STREET2
    SHIPPING_CITY
    SHIPPING_STATE
    SHIPPING_COUNTRY
    SHIPPING_POBOX
    SHIPPING_COUNTY
    SHIPPING_POSTAL_CODE
    SHIPPING_POSTAL_CODE_TYPE
    SPECIAL_INSTRUCTIONS
    SPLITTING_PREFERENCE
    ORDER_SUBTOTAL
    WLCS_ORDER_LINE - It holds all order lines information like
    ORDER_LINE_ID
    QUANTITY
    PRODUCT_ID
    TAX_AMOUNT
    TAX_CURRENCY
    SHIPPING_AMOUNT
    SHIPPING_CURRENCY
    UNIT_PRICE_AMOUNT
    UNIT_PRICE_CURRENCY
    MSRP_AMOUNT
    MSRP_CURRENCY
    DESCRIPTION
    ORDER_ID
    TOTAL_LINE_AMOUNT
    Relation between WLCS_ORDER, WLCS_ORDER_LINE is one to many.
    For each WLCS_ORDER row, one or more order lines will insert into WLCS_ORDER_LINE table.
    For each new row in WLCS_ORDER table, I have to update the following columns in both the tables with my maths.
    WLCS_ORDER
    shipping_amount
    price_amount
    order_subtotal
    WLCS_ORDER_LINE
    shipping_amount
    I thought I can do this in after insert trigger, But if it is not possible, Please give the best way to fulfill this requirement.
    I appreciate your help.
    Have a great day.
    Srinivas

  • How to query DDL locks on stored procedures/functions and packages?

    Hi!
    The subject says it all: How do I see existing DDL locks on stored procedures/functions and packages?
    While a procedure is executed it can't be deleted or replaced, so there has to be a DDL lock on it. The information does not seem to be in V$LOCK or V$LOCKED_OBJECTS.
    Thanks!
    Marcus
    Edited by: MMarcus on Nov 21, 2009 3:43 PM

    Hello,
    Here you can find an article about the view DBA_DDL_LOCKS:
    [http://www.praetoriate.com/int_40.htm]
    If you don't have this view on the Data Dictionary, you may have
    to execute the "OH/rdbms/admin/catblock.sql" script first.
    Hope it can help.
    Best regards,
    Jean-Valentin

  • SSRS with Oracle Stored Procedures, Functions and Packages

    Hi,
    I am working on a BI project. Here we are using PowerPivot to access data from Oracle DB and generate reports. Currently Client generates Few reports using Oracle Stored Procedures, Functions and Packages. We need to move everything to PowerPivot, so
    that user can generate all reports using same platform. But PowerPivot doesn'e support Oracle Stored Procedures, Functions and Packages. So we have decided to try those reports using SSRS.
    I have no knowledge about using SSRS which will call Oracle function/stored procedures/packages for generating reports.
    Can anybody help me in getting exact steps?
    Please let me know if my question is not clear enough.
    Thanks and Regards,
    SS

    Hi Visakh,
    Thanks for the detailed steps. My next question is:
    Is there any other way to develop such reports without using any development tool like Visual Studio? Our aim is to provide a self-serviced reporting platform where user don't need any technical knowledge.
    I am sorry I have no knowledge about SSRS and Oracle DB.Can you please have a look at my Oracle function and let me know whether it's possible to execute this using SSRS? (I am pasting one by one as there is a character limit.
    CREATE OR REPLACE TYPE obj_special_pass_cases
    AS OBJECT
          CLAIM_ID    NUMBER(12),
          claim_ref_no  VARCHAR2(20),
          OFFICER_NAME   VARCHAR2(201),
          SUBMIT_DT   VARCHAR2(10),
          ACC_DT   VARCHAR2(10),
          SP_ISSUE_DT   VARCHAR2(10),
          STATUS    VARCHAR2(30),
          SUB_STATUS   VARCHAR2(30),
          STATUS_LAST_UPDATE_DATE VARCHAR2(10),
          SP_EXP_DT VARCHAR2(10),
          INDUSTRY_CODE VARCHAR2(8),
          EMP_SSIC VARCHAR2(8),
          rel VARCHAR2(4),
          WPNo VARCHAR2(20),
          FIN VARCHAR2(9),
          PASSPORT_NO VARCHAR2(16),
          SPNo VARCHAR2(20),
          VictimName VARCHAR2(100),
          SP_EXT_PURPOSE VARCHAR2(100),
          ISSUE_SYSTEM VARCHAR2(4), 
          REPATRIATION_DATE VARCHAR2(10),
          SP_STATUS    VARCHAR2(30),
          SP_ISSUE_PURPOSE VARCHAR2(500)
    CREATE OR REPLACE TYPE tbl_special_pass_cases
       AS TABLE OF obj_special_pass_cases
    CREATE OR REPLACE TYPE obj_special_pass_casesNew
    AS OBJECT
          CLAIM_ID    NUMBER(12),
          claim_ref_no  VARCHAR2(20),
          OFFICER_NAME   VARCHAR2(201),
          SUBMIT_DT   VARCHAR2(10), /*Case Registration Date*/
          ACC_DT   VARCHAR2(10),
          SP_ISSUE_DT   VARCHAR2(10),
          calc_sp_issue_dt VARCHAR2(10),
          calc_sp_issue_dt_month VARCHAR2(2),
          calc_sp_issue_dt_year VARCHAR2(4),
          calc_Duration_Of_Stay VARCHAR2(4),
          STATUS    VARCHAR2(30),
          SUB_STATUS   VARCHAR2(30),
          STATUS_LAST_UPDATE_DATE VARCHAR2(10),
          lastUpdateDtMonth varchar2(2),
          lastUpdateDtYear varchar2(4),
          DurationOfUpdateDt VARCHAR2(4),
          SP_EXP_DT VARCHAR2(10),
          INDUSTRY_CODE VARCHAR2(8),
          EMP_SSIC VARCHAR2(8),
          rel VARCHAR2(4),
          WPNo VARCHAR2(20), /* New columns from here - SR */
          FIN VARCHAR2(9),
          PASSPORT_NO VARCHAR2(16),
          SPNo VARCHAR2(20),
          VictimName VARCHAR2(100),
          workerNationality VARCHAR2(20),
          employName VARCHAR2(200),
          reportType VARCHAR2(10),
          SP_EXT_PURPOSE VARCHAR2(100),
          ISSUE_SYSTEM VARCHAR2(4), /*IWPS, EIDS*/
          REPATRIATION_DATE VARCHAR2(10),
          SP_STATUS    VARCHAR2(30),
          SP_ISSUE_PURPOSE VARCHAR2(500)
    CREATE OR REPLACE TYPE tbl_special_pass_casesNew
       AS TABLE OF obj_special_pass_casesNew
       FUNCTION getListOfSpecialPassCases(
                  vRepatriationDateFrom VARCHAR2,
                  vRepatriationDateTo VARCHAR2,
                  vIncludeRepatriationDate VARCHAR2)
        RETURN tbl_special_pass_cases
        IS
          TYPE cur_typ IS REF CURSOR;
          SPECIAL_PASS_CASES_CUR cur_typ;
          vSQL1 VARCHAR2(4000);
          --vSQL1 VARCHAR2(4000) := 'SELECT DISTINCT(A.CLAIM_ID), A.CLAIM_REF_NO, A.STATUS, A.SUB_STATUS, A.OFFICER_NAME,  A.SUBMIT_DT, A.ACC_DT, A.vLatestUpdatedDate, A.INDUSTRY_CODE, A.ID_NO, A.vWorkerName, B.vSPWPNO, B.vFIN, B.vSPPassportNo,
    B.vSPIssueDate, B.vSPExpiryDate, B.vSPNo, DECODE(B.vSPExtensionPurpose,''1'',''WICB'',''2'',''RE-APPLICATION'',''3'',''POLICE'',''4'',''REPATRIATION'',''5'',''LRD'',''6'',''LATE RENEWAL'',''9'',''OTHERS'',''10'',''LATE EISSUANCE'',''13'',''FMMD'',''14'',''TMB
    PENDING REPATRIATION'',''15'',''TMB REPATRIATION'',''16'',''PENDING REPATRIATION (SB-F)'',''17'',''REPATRIATION (SB-F)'') vSPExtensionPurpose, B.vIssueSystem, B.vSPActualDepartDate, B.vSPStatus, DECODE(B.vSPIssuePurpose,''1'',''WICB'',''2'',''RE-APPLICATION'',''3'',''POLICE'',''4'',''REPATRIATION'',''5'',''LRD'',''6'',''LATE
    RENEWAL'',''9'',''OTHERS'',''10'',''LATE EISSUANCE'',''11'',''PENDING DOCUMENT VERIFICATION'',''12'',''LATE ERENEWAL'',''13'',''FMMD'',''14'',''TMB PENDING REPATRIATION'',''15'',''TMB REPATRIATION'',''16'',''PENDING REPATRIATION (SB-F)'',''17'',''REPATRIATION
    (SB-F)'') vSPIssuePurpose FROM (SELECT vSPWPNO, vFIN, vSPPassportNo, vSPIssueDate, vSPExpiryDate, vSPNo, vSPExtensionPurpose, vIssueSystem, vSPActualDepartDate, vSPStatus, vSPIssuePurpose FROM TABLE(IOSH_WIC_EXT_INTERFACE_PKG.getIWPSActiveSpecialPass) WHERE
    (vSPWPNO IS NOT NULL OR vFIN IS NOT NULL)) B JOIN (SELECT WC.CLAIM_ID CLAIM_ID, WC.CLAIM_REF_NO CLAIM_REF_NO, WC.STATUS STATUS,  WC.SUB_STATUS SUB_STATUS, TAS.LAST_NAME ||'' ''|| TAS.FIRST_NAME OFFICER_NAME,  to_char(trunc(IRN.SUBMIT_DT), ''dd/MM/yyyy'')
    SUBMIT_DT, TO_CHAR(trunc(decode(wc.assessmt_type,''OD-PI'',EV.OD_CONSULT_DT,''OD-TI'',ev.od_consult_dt,ECASE.acc_dt)), ''dd/MM/yyyy'') ACC_DT, (SELECT TO_CHAR(MAX(WCS.STATUS_START_DT), ''dd/MM/yyyy'') STATUS_LAST_UPDATE_DATE FROM WIC_CLAIM_STATUS WCS WHERE
    WCS.CLAIM_ID=WC.CLAIM_ID) vLatestUpdatedDate, EC.INDUSTRY_CODE INDUSTRY_CODE, EP.ID_NO ID_NO, EP.NAME vWorkerName FROM EVENT_PERSON EP, WIC_CLAIMS WC, TBL_AA_SUBJECT TAS, EVENT_COMPANY EC,EVENT_CASE ECASE,event_victim ev WHERE EP.ID_NO IS NOT NULL AND EP.DELETE_IND
    = ''F'' AND EP.INVOLVEMENT = ''VICTIM'' AND WC.EVENT_CASE_NO = EP.EVENT_CASE_NO AND WC.EVENT_PERSON_ID = EP.EVENT_PERSON_ID AND ep.event_person_id = ev.event_person_id (+) AND WC.ASSIGN_OFFICER_ID = TAS.SUBJECT_ID AND EC.EVENT_CASE_NO=WC.EVENT_CASE_NO AND
    EC.INVOLVEMENT in (''EMPLOYER'',''EMPLOYER_OCCUPIER'') AND ECASE.EVENT_CASE_NO=WC.EVENT_CASE_NO AND EC.DELETE_IND = ''F'') A ON (B.vFIN = A.ID_NO OR B.vSPPassportNo = A.ID_NO)';
          vSQL2 VARCHAR2(4000);
          --vSQL2 VARCHAR2(4000) := 'SELECT DISTINCT(A.CLAIM_ID),A.CLAIM_REF_NO,A.STATUS,A.SUB_STATUS,A.OFFICER_NAME,A.SUBMIT_DT,A.ACC_DT,A.vLatestUpdatedDate,A.INDUSTRY_CODE,A.ID_NO,A.vWorkerName,B.vSPWPNO,B.vFIN,B.vSPPassportNo,B.vSPIssueDate,B.vSPExpiryDate,B.vSPNo,DECODE(B.vSPExtensionPurpose,''1'',''WICB'',''2'',''RE-APPLICATION'',''3'',''POLICE'',''4'',''REPATRIATION'',''5'',''LRD'',''6'',''LATE
    RENEWAL'',''9'',''OTHERS'',''10'',''LATE EISSUANCE'',''13'',''FMMD'',''14'',''TMB PENDING REPATRIATION'',''15'',''TMB REPATRIATION'',''16'',''PENDING REPATRIATION (SB-F)'',''17'',''REPATRIATION (SB-F)'') vSPExtensionPurpose,B.vIssueSystem,B.vSPActualDepartDate,B.vSPStatus,DECODE(B.vSPIssuePurpose,''1'',''WICB'',''2'',''RE-APPLICATION'',''3'',''POLICE'',''4'',''REPATRIATION'',''5'',''LRD'',''6'',''LATE
    RENEWAL'',''9'',''OTHERS'',''10'',''LATE EISSUANCE'',''11'',''PENDING DOCUMENT VERIFICATION'',''12'',''LATE ERENEWAL'',''13'',''FMMD'',''14'',''TMB PENDING REPATRIATION'',''15'',''TMB REPATRIATION'',''16'',''PENDING REPATRIATION (SB-F)'',''17'',''REPATRIATION
    (SB-F)'') vSPIssuePurpose FROM (SELECT vSPWPNO,vFIN,vSPPassportNo,vSPIssueDate,vSPExpiryDate,vSPNo,vSPExtensionPurpose,vIssueSystem,vSPActualDepartDate,vSPStatus,vSPIssuePurpose FROM TABLE(IOSH_WIC_EXT_INTERFACE_PKG.getIWPSDepartedSpecialPass(''' || vRepatriationDateFrom
    || ''', ''' ||  vRepatriationDateTo || ''')) WHERE (vSPWPNO IS NOT NULL OR vFIN IS NOT NULL)) B JOIN (SELECT WC.CLAIM_ID CLAIM_ID, WC.CLAIM_REF_NO CLAIM_REF_NO, WC.STATUS STATUS,WC.SUB_STATUS SUB_STATUS, TAS.LAST_NAME ||'' ''|| TAS.FIRST_NAME OFFICER_NAME, 
    to_char(trunc(IRN.SUBMIT_DT), ''dd/MM/yyyy'') SUBMIT_DT,TO_CHAR(trunc(decode(wc.assessmt_type,''OD-PI'',EV.OD_CONSULT_DT,''OD-TI'',ev.od_consult_dt,ECASE.acc_dt)), ''dd/MM/yyyy'') ACC_DT, (SELECT TO_CHAR(MAX(WCS.STATUS_START_DT), ''dd/MM/yyyy'') STATUS_LAST_UPDATE_DATE
    FROM WIC_CLAIM_STATUS WCS WHERE WCS.CLAIM_ID=WC.CLAIM_ID) vLatestUpdatedDate, EC.INDUSTRY_CODE INDUSTRY_CODE, EP.ID_NO ID_NO, EP.NAME vWorkerName FROM EVENT_PERSON EP, WIC_CLAIMS WC, TBL_AA_SUBJECT TAS, EVENT_COMPANY EC,EVENT_CASE ECASE, IR_NOTIFICATION IRN,event_victim
    ev WHERE EP.ID_NO IS NOT NULL AND EP.DELETE_IND = ''F'' AND EP.INVOLVEMENT = ''VICTIM'' AND WC.EVENT_CASE_NO = EP.EVENT_CASE_NO AND WC.EVENT_PERSON_ID = EP.EVENT_PERSON_ID and ep.event_person_id = ev.event_person_id (+) AND WC.ASSIGN_OFFICER_ID = TAS.SUBJECT_ID
    AND EC.EVENT_CASE_NO=WC.EVENT_CASE_NO AND EC.INVOLVEMENT in (''EMPLOYER'',''EMPLOYER_OCCUPIER'') AND ECASE.EVENT_CASE_NO=WC.EVENT_CASE_NO AND IRN.REF_NO(+) = ECASE.IR_REF_NO AND IRN.SUBMIT_TYPE IN (''SI'',''SE'') AND EC.DELETE_IND = ''F'') A ON (B.vFIN = A.ID_NO
    OR B.vSPPassportNo = A.ID_NO)';
          SPECIAL_PASS_CASES_TBL tbl_special_pass_cases := tbl_special_pass_cases();
       cursor sp_pass_settle_cur is
       SELECT DISTINCT (A.CLAIM_ID),
                    A.CLAIM_REF_NO,
                    A.STATUS,
                    A.SUB_STATUS,
                    A.OFFICER_NAME,
                    A.SUBMIT_DT,
                    A.ACC_DT,
                    A.vLatestUpdatedDate,
                    A.INDUSTRY_CODE,
                    A.ID_NO,
                    A.vWorkerName,
                    B.vSPWPNO,
                    B.vFIN,
                    B.vSPPassportNo,
                    B.vSPIssueDate,
                    B.vSPExpiryDate,
                    B.vSPNo,
                    DECODE(B.vSPExtensionPurpose,
                           '1',
                           'WICB',
                           '2',
                           'RE - APPLICATION',
                           '3',
                           'POLICE',
                           '4',
                           'REPATRIATION',
                           '5',
                           'LRD',
                           '6',
                           'LATE RENEWAL',
                           '9',
                           'OTHERS',
                           '10',
                           'LATE EISSUANCE',
                           '13',
                           'FMMD',
                           '14',
                           'TMB PENDING REPATRIATION',
                           '15',
                           'TMB REPATRIATION',
                           '16',
                           'PENDING REPATRIATION(SB - F)',
                           '17',
                           'REPATRIATION(SB - F)') vSPExtensionPurpose,
                    B.vIssueSystem,
                    B.vSPActualDepartDate,
                    B.vSPStatus,
                    DECODE(B.vSPIssuePurpose,
                           '1',
                           'WICB',
                           '2',
                           'RE - APPLICATION',
                           '3',
                           'POLICE',
                           '4',
                           'REPATRIATION',
                           '5',
                           'LRD',
                           '6',
                           'LATE RENEWAL',
                           '9',
                           'OTHERS',
                           '10',
                           'LATE EISSUANCE',
                           '11',
                           'PENDING DOCUMENT VERIFICATION',
                           '12',
                           'LATE ERENEWAL',
                           '13',
                           'FMMD',
                           '14',
                           'TMB PENDING REPATRIATION',
                           '15',
                           'TMB REPATRIATION',
                           '16',
                           'PENDING REPATRIATION(SB - F)',
                           '17',
                           'REPATRIATION(SB - F)') vSPIssuePurpose
      FROM (SELECT vSPWPNO,
                   vFIN,
                   vSPPassportNo,
                   vSPIssueDate,
                   vSPExpiryDate,
                   vSPNo,
                   vSPExtensionPurpose,
                   vIssueSystem,
                   vSPActualDepartDate,
                   vSPStatus,
                   vSPIssuePurpose
              FROM TABLE(IOSH_WIC_EXT_INTERFACE_PKG.getIWPSActiveSpecialPass)
             WHERE (vSPWPNO IS NOT NULL OR vFIN IS NOT NULL)) B
      JOIN (SELECT WC.CLAIM_ID CLAIM_ID,
                   WC.CLAIM_REF_NO CLAIM_REF_NO,
                   WC.STATUS STATUS,
                   WC.SUB_STATUS SUB_STATUS,
                   TAS.LAST_NAME ||''|| TAS.FIRST_NAME OFFICER_NAME,
                   '' SUBMIT_DT,
                   TO_CHAR(trunc(decode(wc.assessmt_type,
                                        'OD-PI',
                                        EV.OD_CONSULT_DT,
                                        'OD-TI',
                                        ev.od_consult_dt,
                                        ECASE.acc_dt)),
                           'dd/MM/yyyy') ACC_DT,
                   (SELECT TO_CHAR(MAX(WCS.STATUS_START_DT), 'dd/MM/yyyy') STATUS_LAST_UPDATE_DATE
                      FROM WIC_CLAIM_STATUS WCS
                     WHERE WCS.CLAIM_ID = WC.CLAIM_ID) vLatestUpdatedDate,
                   EC.INDUSTRY_CODE INDUSTRY_CODE,
                   EP.ID_NO ID_NO,
                   EP.NAME vWorkerName
              FROM EVENT_PERSON   EP,
                   WIC_CLAIMS     WC,
                   TBL_AA_SUBJECT TAS,
                   EVENT_COMPANY  EC,
                   EVENT_CASE     ECASE,
                   event_victim   ev
             WHERE EP.ID_NO IS NOT NULL
               AND EP.DELETE_IND = 'F'
               AND EP.INVOLVEMENT = 'VICTIM'
               AND WC.EVENT_CASE_NO = EP.EVENT_CASE_NO
               AND WC.EVENT_PERSON_ID = EP.EVENT_PERSON_ID
               AND ep.event_person_id = ev.event_person_id(+)
               AND WC.ASSIGN_OFFICER_ID = TAS.SUBJECT_ID
               AND EC.EVENT_CASE_NO = WC.EVENT_CASE_NO
               AND EC.INVOLVEMENT in ('EMPLOYER', 'EMPLOYER_OCCUPIER')
               AND ECASE.EVENT_CASE_NO = WC.EVENT_CASE_NO
               AND EC.DELETE_IND = 'F') A ON (B.vFIN = A.ID_NO OR  B.vSPPassportNo = A.ID_NO);
       sp_pass_settle_rec sp_pass_settle_cur%rowtype;
       cursor sp_details_with_dt_cur is
     SELECT DISTINCT (A.CLAIM_ID),
                    A.CLAIM_REF_NO,
                    A.STATUS,
                    A.SUB_STATUS,
                    A.OFFICER_NAME,
                    A.SUBMIT_DT,
                    A.ACC_DT,
                    A.vLatestUpdatedDate,
                    A.INDUSTRY_CODE,
                    A.ID_NO,
                    A.vWorkerName,
                    B.vSPWPNO,
                    B.vFIN,
                    B.vSPPassportNo,
                    B.vSPIssueDate,
                    B.vSPExpiryDate,
                    B.vSPNo,
                    DECODE(B.vSPExtensionPurpose,'1','WICB', '2','RE - APPLICATION','3','POLICE','4','REPATRIATION','5','LRD','6','LATE RENEWAL','9','OTHERS','10','LATE EISSUANCE',
                           '13','FMMD','14','TMB PENDING REPATRIATION','15','TMB REPATRIATION','16','PENDING REPATRIATION(SB - F)','17','REPATRIATION(SB
    - F)') vSPExtensionPurpose,
                    B.vIssueSystem,
                    B.vSPActualDepartDate,
                    B.vSPStatus,
                    DECODE(B.vSPIssuePurpose,
                           '1','WICB','2','RE - APPLICATION','3','POLICE','4','REPATRIATION','5','LRD','6','LATE RENEWAL','9','OTHERS', '10', 'LATE EISSUANCE','11','PENDING
    DOCUMENT VERIFICATION',
                           '12','LATE ERENEWAL','13','FMMD','14','TMB PENDING REPATRIATION','15','TMB REPATRIATION','16','PENDING REPATRIATION(SB - F)','17','REPATRIATION(SB
    - F)') vSPIssuePurpose
      FROM (SELECT vSPWPNO,
                   vFIN,
                   vSPPassportNo,
                   vSPIssueDate,
                   vSPExpiryDate,
                   vSPNo,
                   vSPExtensionPurpose,
                   vIssueSystem,
                   vSPActualDepartDate,
                   vSPStatus,
                   vSPIssuePurpose
              FROM TABLE(IOSH_WIC_EXT_INTERFACE_PKG.getIWPSDepartedSpecialPass(''|| vRepatriationDateFrom ||'', ''||  vRepatriationDateTo ||''))
             WHERE (vSPWPNO IS NOT NULL OR vFIN IS NOT NULL)) B
      JOIN (SELECT WC.CLAIM_ID CLAIM_ID,
                   WC.CLAIM_REF_NO CLAIM_REF_NO,
                   WC.STATUS STATUS,
                   WC.SUB_STATUS SUB_STATUS,
                   TAS.LAST_NAME ||''|| TAS.FIRST_NAME OFFICER_NAME,
                   to_char(trunc(IRN.SUBMIT_DT), 'dd/MM/yyyy') SUBMIT_DT,
                   TO_CHAR(trunc(decode(wc.assessmt_type,
                                        'OD - PI',
                                        EV.OD_CONSULT_DT,
                                        'OD - TI',
                                        ev.od_consult_dt,
                                        ECASE.acc_dt)),
                           'dd/MM/yyyy') ACC_DT,
                   (SELECT TO_CHAR(MAX(WCS.STATUS_START_DT), 'dd/MM/yyyy') STATUS_LAST_UPDATE_DATE
                      FROM WIC_CLAIM_STATUS WCS
                     WHERE WCS.CLAIM_ID = WC.CLAIM_ID) vLatestUpdatedDate,
                   EC.INDUSTRY_CODE INDUSTRY_CODE,
                   EP.ID_NO ID_NO,
                   EP.NAME vWorkerName
              FROM EVENT_PERSON    EP,
                   WIC_CLAIMS      WC,
                   TBL_AA_SUBJECT  TAS,
                   EVENT_COMPANY   EC,
                   EVENT_CASE      ECASE,
                   IR_NOTIFICATION IRN,
                   event_victim    ev
             WHERE EP.ID_NO IS NOT NULL
               AND EP.DELETE_IND = 'F'
               AND EP.INVOLVEMENT = 'VICTIM'
               AND WC.EVENT_CASE_NO = EP.EVENT_CASE_NO
               AND WC.EVENT_PERSON_ID = EP.EVENT_PERSON_ID
               and ep.event_person_id = ev.event_person_id(+)
               AND WC.ASSIGN_OFFICER_ID = TAS.SUBJECT_ID
               AND EC.EVENT_CASE_NO = WC.EVENT_CASE_NO
               AND EC.INVOLVEMENT in ('EMPLOYER', 'EMPLOYER_OCCUPIER')
               AND ECASE.EVENT_CASE_NO = WC.EVENT_CASE_NO
               AND IRN.REF_NO(+) = ECASE.IR_REF_NO
               AND IRN.SUBMIT_TYPE IN ('SI', 'SE')
               AND EC.DELETE_IND = 'F') A ON (B.vFIN = A.ID_NO OR  B.vSPPassportNo = A.ID_NO);
         sp_details_with_dt_rec sp_details_with_dt_cur%rowtype;
          /*vSQL VARCHAR2(4000);
          vFIN  VARCHAR2(9);
          vSPPassportNo  VARCHAR2(16);
          vSPWPNO VARCHAR2(20);
          vSPIssueDate VARCHAR2(10);
          vSPExpiryDate VARCHAR2(10);
          vSPNo VARCHAR2(20);
          vSPExtensionPurpose VARCHAR2(100);
          vIssueSystem VARCHAR2(4);
          vSPActualDepartDate VARCHAR2(10);
          vSPStatus VARCHAR2(30);
          vSPIssuePurpose VARCHAR2(500);
          CLAIM_ID NUMBER(12);
          CLAIM_REF_NO VARCHAR2(20);
          STATUS VARCHAR2(30);
          SUB_STATUS VARCHAR2(30);
          OFFICER_NAME VARCHAR2(201);
          SUBMIT_DT VARCHAR2(10);
          ACC_DT VARCHAR2(10);
          vLatestUpdatedDate VARCHAR2(10);
          INDUSTRY_CODE VARCHAR2(8);
          ID_NO VARCHAR2(50);
          vWorkerName VARCHAR2(100);*/
        BEGIN
      if vIncludeRepatriationDate = 'Y' then
       for sp_details_with_dt_rec in sp_details_with_dt_cur
       loop
       SPECIAL_PASS_CASES_TBL.EXTEND;
       SPECIAL_PASS_CASES_TBL(SPECIAL_PASS_CASES_TBL.LAST) := obj_special_pass_cases(sp_details_with_dt_rec.CLAIM_ID,sp_details_with_dt_rec.CLAIM_REF_NO,sp_details_with_dt_rec.OFFICER_NAME,sp_details_with_dt_rec.SUBMIT_DT,sp_details_with_dt_rec.ACC_DT,sp_details_with_dt_rec.vSPIssueDate,sp_details_with_dt_rec.STATUS,sp_details_with_dt_rec.SUB_STATUS,sp_details_with_dt_rec.vLatestUpdatedDate,sp_details_with_dt_rec.vSPExpiryDate,sp_details_with_dt_rec.INDUSTRY_CODE,sp_details_with_dt_rec.INDUSTRY_CODE,'a',sp_details_with_dt_rec.vSPWPNO,sp_details_with_dt_rec.vFIN,sp_details_with_dt_rec.vSPPassportNo,sp_details_with_dt_rec.vSPNo,sp_details_with_dt_rec.vWorkerName,sp_details_with_dt_rec.vSPExtensionPurpose,sp_details_with_dt_rec.vIssueSystem,sp_details_with_dt_rec.vSPActualDepartDate,sp_details_with_dt_rec.vSPStatus,sp_details_with_dt_rec.vSPIssuePurpose);
       end loop;
      else
       for sp_pass_settle_rec in sp_pass_settle_cur
       loop
       SPECIAL_PASS_CASES_TBL.EXTEND;
       SPECIAL_PASS_CASES_TBL(SPECIAL_PASS_CASES_TBL.LAST) := obj_special_pass_cases(sp_pass_settle_rec.CLAIM_ID,sp_pass_settle_rec.CLAIM_REF_NO,sp_pass_settle_rec.OFFICER_NAME,sp_pass_settle_rec.SUBMIT_DT,sp_pass_settle_rec.ACC_DT,sp_pass_settle_rec.vSPIssueDate,sp_pass_settle_rec.STATUS,sp_pass_settle_rec.SUB_STATUS,sp_pass_settle_rec.vLatestUpdatedDate,sp_pass_settle_rec.vSPExpiryDate,sp_pass_settle_rec.INDUSTRY_CODE,sp_pass_settle_rec.INDUSTRY_CODE,'a',sp_pass_settle_rec.vSPWPNO,sp_pass_settle_rec.vFIN,sp_pass_settle_rec.vSPPassportNo,sp_pass_settle_rec.vSPNo,sp_pass_settle_rec.vWorkerName,sp_pass_settle_rec.vSPExtensionPurpose,sp_pass_settle_rec.vIssueSystem,sp_pass_settle_rec.vSPActualDepartDate,sp_pass_settle_rec.vSPStatus,sp_pass_settle_rec.vSPIssuePurpose);
       end loop;
      end if ;
        RETURN SPECIAL_PASS_CASES_TBL;
      END getListOfSpecialPassCases;
    Thanks,
    SS

  • Generating Data for INSERT using a Stored Procedure, Function and Cursor

    I've written a function that I finally got to compile, but was not successful in importing and inserting the data needed to populate a table with at least 1800 rows. Here's what I needed to do:
    -- Generate a random test score ranging from 20 to 100 (already done)
    -- Generate a random final grade for the course ranging from 4 to 0 (representing A to F) (already done, but question below.
    -- Use conditional statements based on the counter to assign three courses (already done -- see SQL statements)
    -- Process no more than 95% of the students (300) for test 1.
    -- For test 2, process no more than 80% of the students who took test 1. Student cannot take test 2 unless the student takes test 1 (does this require a trigger? If so, how would I go about doing this?)
    -- Use a function or another subprocedure to process the grade using IF-ELSIF statements
    For example, I've tried the following statements:
    For procedures
    IF birth_date BETWEEN to_date('01-Jan-89 AND to_date('31-Dec-89','dd-Mon-yy') THEN
    school_grade := 6;
    AND for functions:
    IF birth_date BETWEEN to_date('01-Jan-89 AND to_date('31-Dec-89','dd-Mon-yy') THEN
    RETURN (6);
    RETURN;
    - or -
    IF birth_date BETWEEN to_date('01-Jan-89','dd-Mon-yy') AND to_date('31-Dec-89','dd-Mon-yy') THEN
    school_grade := 9
    RETURN school_grade;
    -- Read the birth_date into the main procedure so that the value returned from the subprocedure or function can populate the birth_date column.
    To give you an idea of what I've already done:
    SQL>
    SQL> CREATE OR REPLACE PROCEDURE add_tests (v_school_grade IN NUMBER) AS
    2
    3 v_counter NUMBER(3) := 0;
    4 v_num_students CONSTANT NUMBER(3) := 300;
    5 v_students_test1 NUMBER := 0;
    6 v_students_test2 NUMBER := 0;
    7 v_student_id VARCHAR2(5);
    8 v_course1 VARCHAR2(2);
    9 v_course2 VARCHAR2(2);
    10 v_course3 VARCHAR2(2);
    11 v_course4 VARCHAR2(2);
    12 v_student_grade NUMBER(1) := 0;
    13 v_test_score NUMBER(3) := 0;
    14 v_course_final_grade NUMBER(1) := 0;
    15 v_birth_date DATE;
    16
    17 FUNCTION pkg_get_grade RETURN NUMBER
    18 IS
    19
    20 v_birth_date DATE;
    21 v_school_grade NUMBER(1) :=0;
    22
    23 CURSOR grade_cur IS
    24 SELECT birth_date FROM students;
    25
    26 BEGIN
    27 OPEN grade_cur;
    28 LOOP
    29 FETCH grade_cur INTO v_birth_date;
    30
    31 EXIT WHEN grade_cur%NOTFOUND;
    32
    33 -- Assign student grade
    34
    35 -- 9th Grade
    36
    37 IF v_birth_date < TO_DATE('01-Jan-87','DD-Mon-YY') THEN
    38 v_school_grade := 9;
    39
    40 -- 8th grade
    41
    42 ELSIF v_birth_date BETWEEN
    43 TO_DATE('01-Jan-87','DD-Mon-YY') AND
    44 TO_DATE('31-Dec-87','DD-Mon-YY') THEN
    45
    46 v_school_grade := 8;
    47
    48 -- 7th grade
    49
    50 ELSIF v_birth_date BETWEEN
    51 TO_DATE('01-Jan-88','DD-Mon-YY') AND
    52 TO_DATE('31-Dec-88','DD-Mon-YY') THEN
    53
    54 v_school_grade := 7;
    55
    56 -- 6th grade
    57
    58 ELSIF v_birth_date BETWEEN
    59 TO_DATE('01-Jan-89','DD-Mon-YY') AND
    60 TO_DATE('31-Dec-89','DD-Mon-YY') THEN
    61
    62 v_school_grade := 6;
    63
    64 -- 5th grade
    65
    66 ELSIF v_birth_date > TO_DATE('31-Dec-89','DD-Mon-YY') THEN
    67
    68 v_school_grade := 5;
    69
    70 END IF; -- end if loop for student's grade
    71 END LOOP; -- end loop for grade_cur
    72 CLOSE grade_cur; -- close cursor for assigning grade
    73 RETURN v_school_grade;
    74
    75 END pkg_get_grade;
    76
    77 PROCEDURE delete_test_info AS
    78
    79 BEGIN
    80
    81 DELETE FROM student_facts;
    82
    83 END delete_test_info;
    84
    85 BEGIN
    86
    87 -- Process student for tests
    88
    89 WHILE (v_counter <= v_num_students) LOOP
    90 v_counter := v_counter + 1; -- initialize counter
    91
    92 -- Set student id
    93
    94 v_student_id := 'S'&#0124; &#0124;v_counter;
    95
    96 -- portion of students taking beginning of year tests
    97
    98 v_students_test1 := v_num_students * .95;
    99
    100
    101 -- Portion of students taking end of year tests
    102
    103 v_students_test2 := v_students_test1 * .80;
    104
    105
    106 -- Est. test scores between 20 and 100
    107
    108 v_test_score := random.rand_max(80) + 20;
    109
    110
    111 -- Est. final grade for course between 0 and 4
    112
    113 v_course_final_grade := random.rand_max(4);
    114
    115
    116 -- Process tests for courses
    117
    118 IF v_counter < ROUND(v_num_students * .20) THEN
    119 v_course1 := 'C1';
    120 v_course2 := 'C2';
    121 v_course3 := 'C3';
    122
    123 ELSIF v_counter BETWEEN ROUND(v_num_students * .20)
    124 AND ROUND(v_num_students * .40) THEN
    125
    126 v_course1 := 'C2';
    127 v_course2 := 'C1';
    128 v_course3 := 'C3';
    129
    130 ELSE IF v_counter BETWEEN ROUND(v_num_students * .40)
    131 AND ROUND(v_num_students * .60) THEN
    132
    133 v_course1 := 'C3';
    134 v_course2 := 'C1';
    135 v_course3 := 'C2';
    136
    137 ELSE IF v_counter BETWEEN (v_num_students * .60)
    138 AND ROUND(v_num_students * .80) THEN
    139
    140 v_course1 := 'C3';
    141 v_course2 := 'C1';
    142 v_course3 := 'C2';
    143
    144 ELSE
    145 v_course1 := 'C4';
    146 v_course2 := 'C2';
    147 v_course3 := 'C3';
    148
    149 END IF;
    150 END IF;
    151 END IF;
    152
    153 -- Input test information for students
    154
    155 -- Beginning of year test for Course 1
    156
    157 IF v_counter <= v_students_test1 THEN
    158 INSERT INTO studentfacts
    159 VALUES(v_student_id, v_course1, 'ACH1999',
    160 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    161 v_student_grade, v_course_final_grade, v_test_score);
    162 ELSE
    163 INSERT INTO studentfacts
    164 VALUES(v_student_id, v_course1, 'ACH1999',
    165 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    166 v_student_grade, v_course_final_grade, NULL);
    167 END IF;
    168
    169
    170 -- End of year test for Course 1
    171
    172 IF v_counter <= v_students_test2 THEN
    173 INSERT INTO studentfacts
    174 VALUES(v_student_id, v_course1,'ACH2000',
    175 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    176 v_student_grade, v_course_final_grade, v_test_score);
    177 ELSE
    178 INSERT INTO studentfacts
    179 VALUES(v_student_id, v_course1, 'ACH2000',
    180 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    181 v_student_grade, v_course_final_grade, NULL);
    182 END IF;
    183
    184
    185 -- Beginning of year test for Course 2
    186
    187 IF v_counter <= v_students_test1 THEN
    188 INSERT INTO studentfacts
    189 VALUES(v_student_id, v_course2, 'ACH1999',
    190 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    191 v_student_grade, v_course_final_grade,
    192 v_test_score);
    193 ELSE
    194 INSERT INTO studentfacts
    195 VALUES(v_student_id, v_course2, 'ACH1999',
    196 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    197 v_student_grade, v_course_final_grade, NULL);
    198 END IF;
    199
    200
    201 -- End of year test for Course 2
    202
    203 IF v_counter <= v_students_test2 THEN
    204 INSERT INTO studentfacts
    205 VALUES(v_student_id, v_course2,'ACH2000',
    206 TO_DATE('01-JUN-2001''DD-MON-YYYY'),
    207 v_student_grade, v_course_final_grade,
    208 v_test_score);
    209 ELSE
    210 INSERT INTO studentfacts
    211 VALUES(v_student_id, v_course2, 'ACH2000',
    212 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    213 v_student_grade, v_course_final_grade, NULL);
    214 END IF;
    215
    216
    217 -- Beginning of year test for Course 3
    218
    219 IF v_counter <= v_students_test1 THEN
    220 INSERT INTO studentfacts
    221 VALUES(v_student_id, v_course3, 'ACH1999',
    222 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    223 v_student_grade, v_course_final_grade,
    224 v_test_score);
    225 ELSE
    226 INSERT INTO studentfacts
    227 VALUES(v_student_id, v_course3, 'ACH1999',
    228 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    229 v_student_grade, v_course_final_grade, NULL);
    230 END IF;
    231
    232
    233 -- End of year test for Course 3
    234
    235 IF v_counter <= v_students_test2 THEN
    236 INSERT INTO studentfacts
    237 VALUES(v_student_id, v_course3,'ACH2000',
    238 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    239 v_student_grade, v_course_final_grade,
    240 v_test_score);
    241 ELSE
    242 INSERT INTO studentfacts
    243 VALUES(v_student_id, v_course3, 'ACH2000',
    244 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    245 v_student_grade, v_course_final_grade, NULL);
    246 END IF;
    247
    248
    249 -- Beginning of year test for Course 4
    250
    251 IF v_counter <= v_students_test1 THEN
    252 INSERT INTO studentfacts
    253 VALUES(v_student_id, v_course4, 'ACH1999',
    254 TO_DATE('01-SEP-1999','DD-MON-Y YYY'),
    255 v_student_grade, v_course_final_grade,
    256 v_test_score);
    257 ELSE
    258 INSERT INTO studentfacts
    259 VALUES(v_student_id, v_course4, 'ACH1999',
    260 TO_DATE('01-SEP-1999','DD-MON-YYYY'),
    261 v_student_grade, v_course_final_grade, NULL);
    262 END IF;
    263
    264
    265 -- End of year test for Course 4
    266
    267 IF v_counter <= v_students_test2 THEN
    268 INSERT INTO studentfacts
    269 VALUES(v_student_id, v_course4,'ACH2000',
    270 TO_DATE('01-JUN-2001', 'DD-MON-YYYY'),
    271 v_student_grade, v_course_final_grade, v_test_score);
    272 ELSE
    273 INSERT INTO studentfacts
    274 VALUES(v_student_id, v_course4, 'ACH2000',
    275 TO_DATE('01-JUN-2001','DD-MON-YYYY'),
    276 v_student_grade, v_course_final_grade, NULL);
    277
    278 END IF;
    279 END LOOP;
    280 END add_tests;
    281 /
    Procedure created.
    SQL>
    SQL> show errors
    No errors.
    SQL>
    SQL> Input truncated to 9 characters
    spool off
    When I executed the main procedure, no data populated the student_table. I've tried several things, but I was not still able to populate the student_fact table (I've been at this for more than a week now, but haven't figured a way to populate the student_facts table with at least 1800 rows). Can you tell me what I need to change (if anything) whether if I need to structure things differently? I'm thinking that I missed something in calling the birth_date into the main procedure or returning the value from either a function or subprocedure. Related to the random final grade -- is there a way to sum the totals of the test scores (each student will have three), and generate a final grade from these values.
    I also compiled successfully a package containing this same information, but don't know how to execute it to see whether this approach works.
    Many thanks to anyone who can help.
    null

    ldsw,
    I am not sure if I totally understand everything that you are trying to do, but I tried to clean up your code and what is listed below is what I came up with. Please see if you can make use of any of it.
    SQL> EDIT ldsw
    CREATE OR REPLACE PACKAGE ldsw
    AS
    CURSOR grade_cur
    IS
    SELECT birth_date
    FROM students;
    PROCEDURE delete_test_info;
    FUNCTION get_grade
    (v_birth_date IN DATE)
    RETURN NUMBER;
    PRAGMA RESTRICT_REFERENCES (get_grade, WNDS, WNPS, RNDS, RNPS);
    PROCEDURE add_tests;
    END ldsw;
    CREATE OR REPLACE PACKAGE BODY ldsw
    AS
    v_student_grade NUMBER (1) := 0;
    PROCEDURE delete_test_info
    IS
    BEGIN
    DELETE FROM studentfacts;
    END delete_test_info;
    FUNCTION get_grade
    (v_birth_date IN DATE)
    RETURN NUMBER
    IS
    v_school_grade NUMBER (1) := 0;
    BEGIN
    IF v_birth_date < TO_DATE ('01-Jan-1987', 'DD-Mon-YYYY')
    THEN
    v_school_grade := 9;
    ELSIF v_birth_date BETWEEN TO_DATE ('01-Jan-1987', 'DD-Mon-YYYY') AND TO_DATE ('31-Dec-1987', 'DD-Mon-YYYY')
    THEN
    v_school_grade := 8;
    ELSIF v_birth_date BETWEEN TO_DATE ('01-Jan-1988', 'DD-Mon-YYYY') AND TO_DATE ('31-Dec-1988', 'DD-Mon-YYYY')
    THEN
    v_school_grade := 7;
    ELSIF v_birth_date BETWEEN TO_DATE ('01-Jan-1989', 'DD-Mon-YYYY') AND TO_DATE ('31-Dec-1989', 'DD-Mon-YYYY')
    THEN
    v_school_grade := 6;
    ELSIF v_birth_date > TO_DATE ('31-Dec-1989', 'DD-Mon-YYYY')
    THEN
    v_school_grade := 5;
    END IF;
    RETURN v_school_grade;
    END get_grade;
    PROCEDURE add_tests
    IS
    v_num_students CONSTANT NUMBER (3) := 300;
    v_students_test1 NUMBER := 0;
    v_students_test2 NUMBER := 0;
    v_counter NUMBER (3) := 0;
    v_student_id VARCHAR2 (5);
    v_test_score NUMBER (3) := 0;
    v_course_final_grade NUMBER (1) := 0;
    v_course1 VARCHAR2 (2) := NULL;
    v_course2 VARCHAR2 (2) := NULL;
    v_course3 VARCHAR2 (2) := NULL;
    v_course4 VARCHAR2 (2) := NULL;
    BEGIN
    ldsw.delete_test_info;
    v_students_test1 := v_num_students * .95;
    v_students_test2 := v_students_test1 * .80;
    FOR rec IN grade_cur
    LOOP
    v_counter := v_counter + 1;
    IF v_counter <= v_num_students
    THEN
    v_student_id := 'S' &#0124; &#0124; TO_CHAR (v_counter);
    v_test_score := random.rand_max (80) + 20;
    v_course_final_grade := random.rand_max (4);
    IF v_counter < ROUND (v_num_students * .20)
    THEN
    v_course1 := 'C1';
    v_course2 := 'C2';
    v_course3 := 'C3';
    ELSIF v_counter BETWEEN ROUND (v_num_students * .20) AND ROUND (v_num_students * .40)
    THEN
    v_course1 := 'C2';
    v_course2 := 'C1';
    v_course3 := 'C3';
    ELSIF v_counter BETWEEN ROUND (v_num_students * .40) AND ROUND (v_num_students * .60)
    THEN
    v_course1 := 'C3';
    v_course2 := 'C1';
    v_course3 := 'C2';
    ELSIF v_counter BETWEEN ROUND (v_num_students * .60) AND ROUND (v_num_students * .80)
    THEN
    v_course1 := 'C3';
    v_course2 := 'C1';
    v_course3 := 'C2';
    ELSE
    v_course1 := 'C4';
    v_course2 := 'C2';
    v_course3 := 'C3';
    END IF;
    SELECT ldsw.get_grade (rec.birth_date)
    INTO v_student_grade
    FROM DUAL;
    IF v_counter <= v_students_test1
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course1,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course1,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test2
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course1,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course1,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test1
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course2,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course2,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test2
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course2,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course2,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test1
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course3,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course3,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test2
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course3,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course3,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test1
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course4,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course4,
    'ACH1999',
    TO_DATE ('01-SEP-1999', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    IF v_counter <= v_students_test2
    THEN
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course4,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    v_test_score);
    ELSE
    INSERT INTO studentfacts
    VALUES (v_student_id,
    v_course4,
    'ACH2000',
    TO_DATE ('01-JUN-2001', 'DD-MON-YYYY'),
    v_student_grade,
    v_course_final_grade,
    NULL);
    END IF;
    END IF;
    END LOOP;
    END add_tests;
    END ldsw;
    Save the file.
    SQL> START ldsw
    Package created.
    Package body created.
    SQL> EXECUTE ldsw.add_tests
    PL/SQL procedure successfully completed.
    SQL> SELECT * FROM student_facts;
    null

  • JDBC-Adapter-Receiver Calling Stored Procedure with Input-Typ Record

    Hallo,
    I´ m trying calling a stored-procedure with two input-parameter; one of typ record (oracle) and one of type tabel of records. Is this possible (I think there are only types like string, integer etc. possible)? When not is there another possibility to work with that type?
    Thanks in advance,
    Frank

    Hi Frank,
    I think stored procedures will not take Array of Records as a Input. If you want to make a loop funtionality etc then JDBC adapter will work accordingly. You need to just call the stored procedure from the JDBC adapter. It will work for the array of records(multiple occurences).
    Receiver JDBC Procedures.
    /people/siva.maranani/blog/2005/05/21/jdbc-stored-procedures
    Alternative option is you can make use of Java Proxy and from there you can call stored procedure ..I think it is possible.. not tried.
    Hope this helps
    Regards,
    Moorthy

  • Help Stored Procedure Problems

    I'm trying to call this stored procedure from VB to update an existing table where its fields match fields in another table.
    I always get a created with erros noteification when I create the procedure.
    CREATE OR REPLACE PROCEDURE smsattribute AS
    CURSOR mycursor IS
    SELECT SMSCOMMODITY.NOMENCLATURE, SMSSIGN_ATTRIBUTE.SIGN_TYPE FROM SMSCOMMODITY, SMSSIGN_ATTRIBUTE WHERE SMSCOMMODITY.WIDTH = SMSSIGN_ATTRIBUTE.WIDTH and SMSCOMMODITY.HEIGHT = SMSSIGN_ATTRIBUTE.HEIGHT and SMSCOMMODITY.NOMENCLATURE = SMSSIGN_ATTRIBUTE.SIGN_
    BEGIN
    FOR SMSSIGN_ATTRIBUTE.SIGN_TYPE IN mycursor LOOP
    UPDATE mycursor SET SMSSIGN_ATTRIBUTE.SIGN_TYPE = SMSCOMMODITY.NOMENCLATURE;
    END LOOP;
    END smsattribute;
    I've also tried the following stored procedure...with the same results.
    UPDATE SMSSIGN_ATTRIBUTE.SIGN_TYPE = (SELECT SMSCOMMODITY.NOMENCLATURE FROM SMSCOMMODITY, SMSSIGN_ATTRIBUTE WHERE SMSCOMMODITY.WIDTH = SMSSIGN_ATTRIBUTE.WIDTH and SMSCOMMODITY.HEIGHT = SMSSIGN_ATTRIBUTE.HEIGHT and SMSCOMMODITY.NOMENCLATURE = SMSSIGN_ATTRIBUTE.SIGN_TYPE)
    Thanks
    null

    Brendan,
    It is not clear what you are trying to do. Ignoring all the syntax errors, it appears that you are trying to update the smsattribute table by setting the sign_type column equal to the value in the nomenclature column of the commodity table where the two are already equal. In other words, you are attempting to create a procedure that will never update anything.
    We would be able to help you more if you would state in words exactly what column of what table you are trying to update with the value from what column of what other table, under what conditions.
    The script below is an example of the general syntax for an update statement like the one you are trying to create. If you will replace table_to_update with the name of the table that you are trying to update and replace column_to_update_to with the name of the column that you want to update and replace table_to_compare with the name of the table that you want to compare to and replace column_to_update_from with the name of the column that you expect to get the value to put in the column_to_update_to and replace each comparison_column with the columns that must already have the same values before updating, then you can use this script.
    UPDATE table_to_update
    SET column_to_update_to =
    (SELECT table_to_compare.column_to_update_from
    FROM table_to_compare
    WHERE table_to_compare.comparison_column1 = table_to_update.comparison_column1
    AND table_to_compare.comparison_column2 = table_to_update.comparison_column2
    AND table_to_compare.comparison_column3 = table_to_update.comparison_column3)
    WHERE (table_to_update.comparison_column1, table_to_update.comparison_column2, table_to_update.comparison_column3) IN
    (SELECT table_to_compare.comparison_column1, table_to_compare.comparison_column2, table_to_compare.comparison_column3
    FROM table_to_compare);
    If you want to create a procedure that performs the update, then just insert the same update statement between begin and end, like this:
    CREATE OR REPLACE PROCEDURE update_table
    AS
    BEGIN
    UPDATE table_to_update
    SET column_to_update_to =
    (SELECT table_to_compare.column_to_update_from
    FROM table_to_compare
    WHERE table_to_compare.comparison_column1 = table_to_update.comparison_column1
    AND table_to_compare.comparison_column2 = table_to_update.comparison_column2
    AND table_to_compare.comparison_column3 = table_to_update.comparison_column3)
    WHERE (table_to_update.comparison_column1, table_to_update.comparison_column2, table_to_update.comparison_column3) IN
    (SELECT table_to_compare.comparison_column1, table_to_compare.comparison_column2, table_to_compare.comparison_column3
    FROM table_to_compare);
    END update_table;
    Barbara
    null

  • How to create an External Content Type with SQL Stored Procedures Parameters and query it in a SharePoint App

    Hi,
    I'm new to SharePoint 2013 I want to be able to query a MSSQL database from a SharePoint App I have tried to create an External Content Type (ECT) which is produced from a MSSQL stored Procedure, this procedure has several parameters which are needed to
    filter the data correctly.  From here I want to produce an external list which I can then query from a c# SharePoint app.  If I leave the filters in the ECT null then the list is of course empty or if enter a default values the results are limited
    for the app to query so are no good.
    I want to dynamically pass values to the ECT when querying from the app, is this not possible.  Should I just be returning everything in an external list and then letting the query in the app filter the data, this seems inefficient?
    Is this the best way to do this or should I be doing this differently?
    Please can someone point me in the right direction.
    Thanks

    Hi Pandra801,
    When you create a the external content type, please try to add a filter based on your select statement.
    http://arsalkhatri.wordpress.com/2012/01/07/external-list-with-bcs-search-filters-finders/
    Or, try to create a stored procedure based on your select statement, then create ECT using the SQL stored procedure.
    A step by step guide in designing BCS entities by using a SQL stored procedure
    http://blogs.msdn.com/b/sharepointdev/archive/2011/02/10/173-a-step-by-step-guide-in-designing-bcs-entities-by-using-a-sql-stored-procedure.aspx
    I hope this helps.
    Thanks,
    Wendy
    Wendy Li
    TechNet Community Support

  • PHP Form Validation and Insert Records

    Hi There,
    I've been scratching my head for 2 days and couldn't find a solution.
    Here is my problem:
    Go to http://ecopethandbags.com/contactTest.php and click the "Send Comments" button.
    You will see that the validation works.
    Now, go to http://ecopethandbags.com/contactTestInsert.php, this time, I've inserted the "Insert Record" server behavior.
    Click the "Send Comments" button again.
    You will see the ugly message like "Column 'firstname' cannot be null" in a plain white page.
    My question is:
    How can I insert the PHP form records in my database and take advantage of the form validation nicely like in http://ecopethandbags.com/contactTest.php
    I am attaching the files.
    Thank you for you help!

    boloco wrote:
    My question is:
    How can I insert the PHP form records in my database and take advantage of the form validation nicely like in http://ecopethandbags.com/contactTest.php
    Use simple PHP logic to merge the scripts together.
    Dreamweaver automatically puts the Insert Record server behavior code at the top of the script. You need to adapt it so that the validation is done first. If the validation succeeds, use the Insert Record server behavior. If not, redisplay the form.
    if (array_key_exists('send', $_POST)) {
      // validate the form input
      if (!$suspect && empty($missing)) {
      // send the mail
        if ($mailSent) {
        unset($missing);
        // insert the Insert Record server behavior code here

  • CFForms and Insert Record

    Ok, so I'm playing around with the cfforms tag and the rich
    text editor capabilities. But I noticed that after setting up the
    form, I wasn't able to use the "Insert Record" option from the
    Applications > Server Behaviors panel. When I try to use it, it
    tells me that I need toinsert a form onto the page first. Just
    wondered if someone can shed some light on this.

    Hello,
       As Javier said you can use the Merge Statement, and you can use the Merge Statement with dynamic sql. Please check the below merge statement used dynamic sql.
    DECLARE @SqlStatement NVARCHAR(MAX)
    SET @SqlStatement = N'MERGE Destination as target
    USING Source as source
    on (target.ServerName = Source.ServerName)
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (ServerName, ID) VALUES (ServerName, ID)
    WHEN NOT MATCHED BY SOURCE THEN
    UPDATE SET DateDeleted = GETDATE();'
    EXEC sp_executesql @sqlStatement
    Abhi.
    Please click "Propose As Answer" if a post solves your problem or "Vote As Helpful" if a post has been
    useful to you

  • ESB performance issue: takes too long to select and insert records in DBs

    Hi,
    I have an ESB service which has to select data from seven different tables(using join operations) of one database and insert it into a single table of another database.
    It takes unduly long time to do this operation.
    For ex: it takes over 2 hours to select and insert 3000 records.
    When ran the same query to select the records from the tables using SQL developer, it took only 23 seconds.
    Do I need to change any configuration settings in the enterprise manager or someother place to increase the performance. Someone please advice.
    I am using Oracle SOA Suite 10.1.3.4
    Thanks,
    RV

    Hi,
    I have an ESB service which has to select data from seven different tables(using join operations) of one database and insert it into a single table of another database.
    It takes unduly long time to do this operation.
    For ex: it takes over 2 hours to select and insert 3000 records.
    When ran the same query to select the records from the tables using SQL developer, it took only 23 seconds.
    Do I need to change any configuration settings in the enterprise manager or someother place to increase the performance. Someone please advice.
    I am using Oracle SOA Suite 10.1.3.4
    Thanks,
    RV

Maybe you are looking for