ORA-14451 : Can't do DML inside a select : PL/SQL Question

I was just wondering if anyone had an answer to this little conundrum.
I've got a PL/SQL function in a package which has an insert statement inside it which I only
want to perform the insert if it's called from another PL/SQL procedure or function
but not do the insert if it's used in a select statement.
Does anyone know if you can work out the context in which a function is being called within
the function as it would generally be cleaner if I only had one implementation rather than one
for each context.
Not desparately important but it would be nice to know....
Thanks,
Rob

I don't know what the fuss it about -- but -- it seems to work for me. And I can think of a place where this would be useful. In an Oracle (ERP) Applications Alert. Alerts are limited and being able to SELECT and UPDATE a table, from inside the SELECT is useful. SQL Rules are for people who follow rules [HA :) ]
SQL> CREATE TABLE TEST
  2  (      Id      Number
  3  ,      Num1      NUMBER
  4  );
Table created.
SQL> CREATE TABLE TEST2
  2  (      Id      Number
  3  ,      Num1      NUMBER
  4  );
Table created.
SQL>
SQL> INSERT INTO TEST ( Id, Num1 ) VALUES ( 1, 1 );
1 row created.
SQL> INSERT INTO TEST ( Id, Num1 ) VALUES ( 2, 2 );
1 row created.
SQL> INSERT INTO TEST ( Id, Num1 ) VALUES ( 3, 3 );
1 row created.
SQL>
SQL> CREATE OR REPLACE PACKAGE TEST_PK
  2  IS
  3        FUNCTION Return_X RETURN VARCHAR2;
  4  END;
  5  /
Package created.
SQL> show errors package test_pk;
No errors.
SQL>
SQL> CREATE OR REPLACE PACKAGE BODY TEST_PK
  2  IS
  3        FUNCTION Return_X
  4            RETURN VARCHAR2
  5        IS
  6        PRAGMA AUTONOMOUS_TRANSACTION;
  7        BEGIN
  8            INSERT INTO TEST2 ( Id, Num1 ) VALUES ( 21, 21 );
  9            COMMIT;
10            RETURN 'X';
11        END Return_X;
12
13  END;
14  /
Package body created.
SQL> show errors package body test_pk;
No errors.
SQL>
SQL> SELECT TEST_PK.Return_X AS Test_Thing FROM TEST;
TEST_THING
X
X
X
SQL>
SQL> SELECT * FROM TEST2;
       ID      NUM1
       21        21
       21        21
       21        21

Similar Messages

  • ORA-14551 when using rules manager inside a SELECT * FROM TABLE(myFunction)

    Hello
    I want to return rows from a pipelined function, and map this to a view, or a BC4J an query this in my application.
    I want to populate the rows based on many evaluations, to achieve this, I want to include the rules manager functionality.
    I have defined my event, rule class and result view successfully, but... when I run my query, I have the following error:
    ORA-14551: cannot perform a DML operation inside a query
    We believe this is caused when the engine tries to populate the results view with the matching rules.
    Is there a workaround for this?
    Please help
    Thnks in advance.
    Alex.

    Alex,
    I cannot think of any workaround that would allow you to evaluate the rules and return the results with a single query. A Rules Manager application with composite events modifies the state of the database (for maintaining incremental state as well as the results view) when some events are processed. So, you will not be able to pipeline the results to a SQL query. If you can at least separate the ADD_EVENTS call from the rest of the logic this may be possible.
    Hope this helps,
    -Aravind.

  • ORA-14551: cannot perform a DML operation inside a query

    I have a Java method which is deployed as a Oracle function.
    This Java method parses a huge XML & populates this data
    into a set of database tables.
    I have to call this Oracle function in a unix shell script using sqlplus.
    Value returned by this function will be used by the shell script to decide
    what to do next.
    I am calling the Oracle Java function as follows in the shell script:
    echo "SELECT XML_TABLES.RUN_XML_LOADER('$P1','$P2','$P3','$P4') FROM DUAL;\n" | sqlplus $DB_USER > $LOG
    This gives error - "ORA-14551: cannot perform a DML operation inside a query".
    If I have to add a AUTONOMOUS_TRANSACTION pragma to this Java function,
    where to I add it considering, that the definition of the function is in a Java class.
    Can we do it in call spec?
    create or replace package XML_TABLES is
    function RUN_XML_LOADER(xmlFile IN VARCHAR2,
    xmlType IN VARCHAR2,
    outputDir IN VARCHAR2,
    logFileDir IN VARCHAR2) RETURN VARCHAR2 AS
    LANGUAGE JAVA NAME 'XmlLoader.run
    (java.lang.String, java.lang.String, java.lang.String, java.lang.String)
    return java.lang.String';
    end XML_TABLES;
    If not is there any other way to acheive this?
    Thanks in advance.
    Sunitha.

    If I have to add a AUTONOMOUS_TRANSACTION pragma to this Java function,You'd have to write a PL/SQL function that calls the JSP. But I would caution you about using that pragma. It does introduce tremendous complexity into processing.
    As I see it you only need a function to return the result code so why not use a procedure with an OUT parameter?
    Cheers, APC
    Of course Yoann's suggestion of using an anonymous block would work too.
    Message was edited by:
    APC

  • Probelm regarding function ( can not perform dml openration inside a query

    hi all,
    i have created on function which is used for delete rows and insert new rows ( records) but when i run i got
    ora-14551 -can not perform a DML operation inside a query
    0ra-06512 - fn_brok_upfdate_dtltbl , line no 21
    this error
    following are my code please help me
    CREATE OR REPLACE FUNCTION Fn_Brok_Update_Dtltbl
    (fnBROK_TYPE VARCHAR2,fnSLAB_ID VARCHAR2, fnINV_TYPE_CODE VARCHAR2)
    RETURN NUMBER
    AS
    fnCOUNT      PLS_INTEGER;
    fnTBLNAME     VARCHAR2(40);
    fnTMPINV_TYPE_CODE VARCHAR2(1000);
    fnTMPINVCODE       VARCHAR2(50);
    fnMYQUERY          VARCHAR2(4000);
    BEGIN
          IF UPPER(fnBROK_TYPE) = 'UPFRONT' THEN
          fnTBLNAME :='UPFRONT_RECD_DTL';
          END IF ;
        IF fnSLAB_ID IS NOT NULL AND fnINV_TYPE_CODE IS NOT NULL THEN
        fnTMPINV_TYPE_CODE := fnINV_TYPE_CODE ;
                 fnMYQUERY := 'SELECT COUNT(*) FROM '||fnTBLNAME||' WHERE SLAB_ID = '''||fnSLAB_ID||'''' ;
                 EXECUTE IMMEDIATE fnMYQUERY INTO fnCOUNT  ;
              IF fnCOUNT > 0 THEN
                    DELETE FROM UPFRONT_RECD_DTL WHERE slab_id = fnslab_id ;
              END IF ;
              WHILE fnTMPINV_TYPE_CODE IS NOT NULL
                    LOOP
                        SELECT  CASE WHEN INSTR(fnTMPINV_TYPE_CODE,',')= 0 THEN fnTMPINV_TYPE_CODE
                        ELSE Strsplit(fnTMPINV_TYPE_CODE,1,INSTR(fnTMPINV_TYPE_CODE,',') - 1  ) END  INTO fnTMPINVCODE FROM DUAL ;
                        fnMYQUERY := 'INSERT INTO '||fnTBLNAME||'(SLAB_ID, INV_TYPE_CODE)
                                VALUES ('''||fnSLAB_ID||''','||fnTMPINVCODE||') ' ;
                        EXECUTE IMMEDIATE fnMYQUERY ;
                        SELECT CASE WHEN INSTR(fnTMPINV_TYPE_CODE,',')= 0 THEN NULL
                        ELSE Strsplit(fnTMPINV_TYPE_CODE,INSTR(fnTMPINV_TYPE_CODE,',')+ 1 , LENGTH(fnTMPINV_TYPE_CODE)) END
                        INTO fnTMPINV_TYPE_CODE FROM DUAL ;
                   END LOOP ;
       fnCOUNT := 1 ;
       RETURN fnCOUNT ;
       END IF ;
    END ;
    [\pre]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    How did you call this function ? from SQL Statement ? Then No way .. . .
    ORA-14551: cannot perform a DML operation inside a query
    Cause: DML operation like insert, update, delete or select-for-update cannot be performed inside a query or under a PDML slave.
    Action: Ensure that the offending DML operation is not performed or use an autonomous transaction to perform the DML operation within the query or PDML slave

  • Getting error SQL Error : ORA-14551: cannot perform a DML operation inside a query

    Hi gurus ,
    Your help is greatly appreciated ..
    I am doing some changes in the fucntion for an existing package .Introducing the new below check , am updating one of the tables based on a if condition ..
           IF  numALLOWED_COUNT >= numLAST_COUNT_ADDED+1  THEN
                     blnGDS_Allowed :=True;
                      varSTMT := 'UPDATE PROD.TMS_PROCESS_COUNTER ';
                      varSTMT := varSTMT ||' SET last_count_added = last_count_added+1';
                      varSTMT := varSTMT ||' WHERE process_name = ''DAILY_GDS_COUNT''';
                      varSTMT := varSTMT ||' AND COUNTER_IND = ''750FD130''';
                     PROC_LOG('Update Tms_Process_counter varSTMT --' || varSTMT);
                     IF INSERT_BATCH(99,varSTMT) > 0 THEN
                        NULL;
                     END IF;
    Function for insert_batch :
    UNCTION INSERT_BATCH(numTABLE_ID IN NUMBER, varSQL_STATEMENT IN VARCHAR2) RETURN NUMBER IS
    varINSERT_BATCH_STMT  VARCHAR2(32767)     := NULL;
    varADD_REC_TYPE       BATCH_TABLES.ADD_REC_TYPE%TYPE;
    BEGIN
        PROC_LOG( 'INSIDE INSERT_BATCH IRC : ' || varSQL_STATEMENT );  --IRC 9/20 UC
        INSERT INTO BATCH_STATEMENT(QUEUE_ID,TABLE_ID,STATEMENT,QUEUE_SEQUENCE_ID)
        VALUES (numQUEUE_ID,numTABLE_ID,varSQL_STATEMENT,1);
    RETURN 1;
    EXCEPTION WHEN OTHERS THEN
        PROC_LOG('Failed in INSERT_BATCH');
        PROC_LOG('SQL Error : ' || SUBSTR(SQLERRM,1,1000));
        RETURN -1;
    END INSERT_BATCH;
    desc PROD.BATCH_STATEMENT
      QUEUE_ID           NUMBER(15)                 NOT NULL
      TABLE_ID           NUMBER(2)                  NOT NULL
      STATEMENT          VARCHAR2(4000 BYTE)        NOT NULL
      QUEUE_SEQUENCE_ID  NUMBER(5)                  NOT NULL
    Some how when its calling the insert_batch , its giving me the error in the logs as below:
    04:01:41 - Update Tms_Process_counter varSTMT --UPDATE PROD.TMS_PROCESS_COUNTER  SET last_count_added = last_count_added+1 WHERE process_name = 'DAILY_GDS_COUNT' AND COUNTER_IND = '750FD130'
    04:01:41 - INSIDE INSERT_BATCH IRC : UPDATE PROD.TMS_PROCESS_COUNTER  SET last_count_added = last_count_added+1 WHERE process_name = 'DAILY_GDS_COUNT' AND COUNTER_IND = '750FD130'
    04:01:41 - Failed in INSERT_BATCH
    04:01:41 - SQL Error : ORA-14551: cannot perform a DML operation inside a query

    Some how when its calling the insert_batch , its giving me the error in the logs as below:
    04:01:41 - SQL Error : ORA-14551: cannot perform a DML operation inside a query
    Yes - and the exception is telling you EXACTLY what the problem is. You have a query
    IF INSERT_BATCH(99,varSTMT) > 0 THEN
    And you are performing a DML operation inside that query:
    INSERT INTO BATCH_STATEMENT(QUEUE_ID,TABLE_ID,STATEMENT,QUEUE_SEQUENCE_ID)
        VALUES (numQUEUE_ID,numTABLE_ID,varSQL_STATEMENT,1);
    Like the exception says: you can't do that.
    You need to call the function using PL/SQL and capture the return value into a variable. Then test that variable:
    myVar := INSERT_BATCH(99,varSTMT);
    if myVar > 0 THEN

  • ORA-38301: can not perform DDL/DML over objects in Recycle Bin

    Oracle 10.2.0.4:
    When performing DDL on a table I get the error "ORA-38301: can not perform DDL/DML over objects in Recycle Bin". I ran purge recyclebin but didn't help. I then ran following sql (below) and it returned whole bunch of rows for that user. Does it mean that purfe recyclebin didn't work? What should I do?
    select r.obj#, r.original_name, u.username from recyclebin$ r, dba_users u where r.owner#=u.user_id

    I ran purge recyclebin but didn't helpis this a rac env?
    check the metalink note performing DML/DDL operation over object in bin ORA-38301 - 578075.1
    Bug 4760728 - ORA-38301 during DROP TABLE when already dropped from a different node 4760728.8

  • ORA-01461: can bind a LONG value only for insert into a LONG colu

    Hello - I have a variable defined in a package as VARCHAR2(32720). This is not a table column. I am building a string inside the vairable, loading in invoice data in sections one at a time. It seems that once I get a larger number of invoices (say 100+) to load in, I get the "ORA-01461: can bind a LONG value only for insert into a LONG column" error. I am not trying to insert into a table column; just stringing together data in this large variable.
    Why would I be getting this error ? And is there a workaround ? The variable is read back out iin 80 byte strings which are then loaded to a table column that is varchar2(80).
    Thanks !!
    Jim Ernst
    Invacare Corporation

    Here is the definition of the field:
    l_EDI820_Data VARCHAR2(32720);
    And here is the loop used to populate the field. As i mentioned, it seems that once the process gets over 100 invoices coming in that the field hits the error; seems as if we are hitting say 4000 characters or near it at that point...
    FOR r_INVOICE_DETAIL IN cr_INVOICE_DETAILS LOOP
    l_EDI820_Data := l_EDI820_Data
    ||l_RMR_Statement
    ||r_INVOICE_DETAIL.INVOICE_NUM
    ||'*PI*'
    ||LTRIM(TO_CHAR(NVL(r_INVOICE_DETAIL.PAYMENT_AMOUNT,0))) -- Net Amount to be applied
    ||'*'
    ||LTRIM(TO_CHAR(r_INVOICE_DETAIL.INVOICE_AMOUNT,'999999.99')) -- Gross Amount
    ||l_Delimiter;
    l_TOTAL_SEGMENTS := l_TOTAL_SEGMENTS + 1;
    END LOOP; -- r_INVOICE_DETAIL
    There are some other statements that are adding additional data onto l_EDI820_Data ; this one is the loop that is basedon the invoices coming in.
    This code writes it to the table (field EDI820_DATA in the table is VARCHAR2(94)):
    l_EDI820_String_Length := LENGTH(RTRIM(l_EDI820_Data));
    l_EDI820_SUBSTR_START := 1;
    l_RECORD_SEQ_NO := 1;
    WHILE SUBSTR(l_EDI820_Data, l_EDI820_SUBSTR_START, 80) <> ' ' LOOP
    INSERT INTO XXAP_NACHA_EDI820_GTEMP_TBL
    SELECTED_CHECK_ID
    ,EDI820_SEQ
    ,EDI820_DATA
    VALUES (
    r_CHECK_IDS.SELECTED_CHECK_ID
    ,l_RECORD_SEQ_NO
    ,'705'||SUBSTR(l_EDI820_Data, l_EDI820_SUBSTR_START, 80)
    -- * Increment starting point for substring and also record sequence number
    l_EDI820_SUBSTR_START := l_EDI820_SUBSTR_START + 80;
    l_RECORD_SEQ_NO := l_RECORD_SEQ_NO + 1;
    END LOOP; -- WHILE Loop

  • ORA-01461: can bind a LONG value only for insert into a LONG column ORA-020

    Getting error --
    ORA-01461: can bind a LONG value only for insert into a LONG column ORA-02063: preceding line from APPS
    A page has 3 fields and a Add button
    (1) first field is a LOV "select with submit"
    (2) second field is getting its value from select statement with where clause = ID selected from field1
    (3) field 3 is the value of field1
    In After submit Process , I write simple insert as follows in the
    BEGIn
    INSERT INTO TABLE_NAME (ELEMENT_NAME,ELEMENT_TYPE_ID )
    VALUES (:P3_NAME ,to_number(:P3_ELEMENT_TYPE_ID));
    COMMIT;
    END;
    when i click on Add i get the error above

    try doing the bind locally before executing the remote dml...
    declare
    l_long long := :P3_NAME;
    begin
    insert into table_name (ELEMENT_NAME,ELEMENT_TYPE_ID )
    values (l_long ,to_number(:P3_ELEMENT_TYPE_ID));
    end;
    ...and if that doesn't work, please let us know the definition of you TABLE_NAME table.
    thanks,
    raj

  • APex 4.1 Error ORA-01461: can bind a LONG value only for insert into a LONG

    Hi There,
    Facing a strange issue.
    I have a regular cursor, and in that cursor loop I have a select statement into some variables based on cursor parameters.
    I was getting the "ORA-01461: can bind a LONG value only for insert into a LONG column" error so I started individually checking each of the columns. Now it works fine for some column, but the moment I add this number field. It starts throwing this error. Now, the database source where the select is fired is of type number, the variable into which I select it is number .
    Infact, I dont have any LONG column defined anywhere.
    The strange thing is that the block executes perfectly fine in SQl developer. So looks like a Apex specific issue.
    I am on 4.1/11g
    Any ideas?
    Thanks,
    Sun

    sun1977 wrote:
    Now, I have put this inside a Dynamic action (PL/SQL procedure). I think this PL/SQL procedure will go up to about 1500 to 2000 lines of code. There are no long columns involved anywhere or even CLOB, BLOB etc.
    Is there any limitation to the size of code? When you say size of a code. Are you saying the whole PL/SQL block is stored in one Varchar2(4000) field? :) Did not know that. I am quite sure, the PL/SQL compiled package on the database would work perfect. Just was wondering why it was not working within APEX!
    Also, Is there any documentation regarding this that you might be aware of?You can look at the APEX views. Code for some purposes (like region source) is stored in CLOBs:
    desc apex_application_page_regions
    Name                           Null     Type               
    WORKSPACE                      NOT NULL VARCHAR2(255 BYTE) 
    WORKSPACE_DISPLAY_NAME                  VARCHAR2(4000 BYTE)
    APPLICATION_ID                 NOT NULL NUMBER             
    APPLICATION_NAME               NOT NULL VARCHAR2(255 BYTE) 
    PAGE_ID                        NOT NULL NUMBER             
    PAGE_NAME                      NOT NULL VARCHAR2(255 BYTE) 
    REGION_NAME                    NOT NULL VARCHAR2(255 BYTE) 
    PARENT_REGION_ID                        NUMBER             
    PARENT_REGION_NAME                      VARCHAR2(255 BYTE) 
    TEMPLATE                                VARCHAR2(255 BYTE) 
    TEMPLATE_ID                             NUMBER             
    STATIC_ID                               VARCHAR2(255 BYTE) 
    REST_ENABLED                            VARCHAR2(3 BYTE)   
    DISPLAY_SEQUENCE               NOT NULL NUMBER             
    DISPLAY_REGION_SELECTOR                 VARCHAR2(3 BYTE)   
    REGION_ATTRIBUTES_SUBSTITUTION          VARCHAR2(4000 BYTE)
    ESCAPE_ON_HTTP_OUTPUT                   VARCHAR2(3 BYTE)   
    DISPLAY_COLUMN                          NUMBER             
    DISPLAY_POSITION                        VARCHAR2(255 BYTE) 
    DISPLAY_POSITION_CODE                   VARCHAR2(255 BYTE) 
    REGION_SOURCE                           CLOB
    ...for others&mdash;like LOV source and DA actions (PL/SQL code is stored in <tt>ATTRIBUTE_01</tt>)&mdash;are only VARCHAR2(4000 BYTE):
    desc apex_application_page_da_acts
    Name                        Null     Type               
    WORKSPACE                   NOT NULL VARCHAR2(255 BYTE) 
    WORKSPACE_DISPLAY_NAME               VARCHAR2(4000 BYTE)
    APPLICATION_ID              NOT NULL NUMBER             
    APPLICATION_NAME            NOT NULL VARCHAR2(255 BYTE) 
    PAGE_ID                     NOT NULL NUMBER             
    PAGE_NAME                   NOT NULL VARCHAR2(255 BYTE) 
    DYNAMIC_ACTION_ID           NOT NULL NUMBER             
    DYNAMIC_ACTION_NAME         NOT NULL VARCHAR2(255 BYTE) 
    ACTION_NAME                          VARCHAR2(100 BYTE) 
    ACTION_CODE                 NOT NULL VARCHAR2(50 BYTE)  
    ACTION_SEQUENCE             NOT NULL NUMBER             
    DYNAMIC_ACTION_EVENT_RESULT          VARCHAR2(5 BYTE)   
    EXECUTE_ON_PAGE_INIT                 VARCHAR2(3 BYTE)   
    AFFECTED_ELEMENTS                    VARCHAR2(4000 BYTE)
    AFFECTED_ELEMENTS_TYPE               VARCHAR2(30 BYTE)  
    AFFECTED_REGION                      VARCHAR2(255 BYTE) 
    AFFECTED_REGION_ID                   NUMBER             
    ATTRIBUTE_01                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_02                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_03                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_04                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_05                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_06                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_07                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_08                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_09                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_10                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_11                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_12                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_13                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_14                         VARCHAR2(4000 BYTE)
    ATTRIBUTE_15                         VARCHAR2(4000 BYTE)
    STOP_EXECUTION_ON_ERROR              VARCHAR2(3 BYTE)   
    LAST_UPDATED_BY                      VARCHAR2(255 BYTE) 
    LAST_UPDATED_ON                      DATE               
    COMPONENT_COMMENT                    VARCHAR2(4000 BYTE)
    ACTION_ID                   NOT NULL NUMBER             
    COMPONENT_SIGNATURE                  CHAR(15 BYTE)       Oracle presmably have reasons for this difference but it's not something that is made clear in any way through the Builder UI.
    Common sense should come into play. As Tony points out, the proper way to develop and deploy complex PL/SQL is using modular subprograms stored in packages. Same for APEX as for anything else.

  • Cannot perform DML inside a query

    Hi,
    I have a Function and I am trying to execute an "Insert" statement into the Function. It gives me an error saying that-
    ERROR:
    ORA-14551: cannot perform a DML operation inside a query
    ORA-06512: at "SCOTT.POP3", line 243
    I then tried adding : PRAGMA AUTONOMOUS_TRANSACTION to the Function and then it gives me an error saying-
    ERROR:
    ORA-06519: active autonomous transaction detected and rolled back
    ORA-06512: at "SCOTT.POP3", line 245
    My code snippet is as follows :
    CREATE OR REPLACE FUNCTION pop3 (
    username VARCHAR2,
    PASSWORD VARCHAR2,
    msgnum NUMBER
    RETURN tstrings PIPELINED
    IS
    --PRAGMA AUTONOMOUS_TRANSACTION;
    pop3_server CONSTANT VARCHAR2 (100) := 'pop.secureserver.net';
    pop3_port CONSTANT NUMBER := 110;
    pop3_ok CONSTANT VARCHAR2 (10) := '+OK';
    e_pop3_error EXCEPTION;
    socket UTL_TCP.connection;
    line VARCHAR2 (30000);
    line2                    VARCHAR2 (30000);
    BYTES INTEGER;
    msg_from varchar2(4000) := '';
    msg_to varchar2(4000) := '';
    msg_date varchar2(4000) := '';
    msg_sub varchar2(4000) := '';
    msg_body clob := NULL;
    hyphen_checker number := 0;
    msg_body_flag number := 0;
    crlf varchar2(2) := chr(13) || chr(10);
    -- send a POP3 command
    -- (we expect each command to respond with a +OK)
    FUNCTION writetopop (command VARCHAR2)
    RETURN VARCHAR2
    IS
    len INTEGER;
    resp VARCHAR2 (30000);
    BEGIN
    len := UTL_TCP.write_line (socket, command);
    UTL_TCP.FLUSH (socket);
    -- using a hack to check the popd response
    len := UTL_TCP.read_line (socket, resp);
    IF SUBSTR (resp, 1, 3) != pop3_ok
    THEN
    RAISE e_pop3_error;
    END IF;
    RETURN (resp);
    END;
    BEGIN
         DBMS_LOB.CREATETEMPORARY(msg_body,true);
    PIPE ROW ('pop3:' || pop3_server || ' port:' || pop3_port);
    -- Just to make sure there are no previously opened connections
    UTL_TCP.close_all_connections;
    -- open a socket connection to the POP3 server
    socket :=
    UTL_TCP.open_connection (remote_host => pop3_server,
    remote_port => pop3_port,
    --tx_timeout => POP3_TIMEOUT,
    CHARSET => 'US7ASCII'
    -- read the server banner/response from the pop3 daemon
    PIPE ROW (UTL_TCP.get_line (socket));
    -- authenticate with the POP3 server using the USER and PASS commands
         LOOP
    EXIT WHEN LENGTH (line) = 1 AND line = '.';
         END LOOP;
         INSERT INTO email (em_issue, em_date, em_from, em_to, em_subject, em_body)
         VALUES(seq_issue.nextval, msg_date, msg_from, msg_to, msg_sub, msg_body);
         DBMS_LOB.freetemporary(msg_body);
         msg_from := '';
         msg_to := '';
         msg_date := '';
         msg_sub := '';
         msg_body := NULL;
         -- close connection
         PIPE ROW ('QUIT');
         PIPE ROW (writetopop ('QUIT'));
         UTL_TCP.close_connection (socket);
    EXCEPTION
    WHEN e_pop3_error
    THEN
    PIPE ROW ('There are no mails !');
    END;
    Message was edited by:
    Monk
    Message was edited by:
    Monk

    See Note:313597.1 on MetaLink

  • Cannot perform DDL DML inside a query

    Hi,
    I am using Tom Kyte's in_list function to create a select list inside a select query in one of the reports in my application, given as follows:
    SELECT col1, col2,...htmldb_item.select_list_from_query(1,NULL,
    '(SELECT column_value d,column_value r FROM the((SELECT CAST
    (mypackage.in_list(''||colon_delimited_list||'') AS
    myTableType) FROM dual) ))' )...FROM A, B WHERE ...
    But the following error appears:
    report error:
    ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
    ORA-06512: at "FLOWS_020200.WWV_FLOW", line 7002
    ORA-06512: at "FLOWS_020200.WWV_FLOW_UTILITIES", line 113
    ORA-06550: line 1, column 45:
    PLS-00103: Encountered the symbol "(" when expecting one of the following:
    begin case declare exit for goto if loop mod null pragma
    raise return select update while with
    If I replace the query passed to function select_list_from_query, with some simple dummy query, then it works fine.
    Please tell me is there any limitation of its use as this case?
    What may be the possible best solution?
    Regards,
    Amir Aman

    I have tried Scott's parenthesis solution first.
    It is working but with making an additional change, i.e., passing '||''''||colon_delimited_list||''''||' instead just ''||colon_delimited_list||''.
    Denes, I have also seen your examples, really a helpful resource.
    Thank you very much!
    Amir Aman

  • ORA-01180: can not create datafile 1 during RMAN restore.

    Hello,
    I am trying to refresh one of our QA environments and I am getting this error message:
    RMAN> run
    2> {
    3> allocate channel c1 device type disk;
    4> allocate channel c2 device type disk;
    5> restore database;
    6> recover database;
    7> }
    allocated channel: c1
    channel c1: SID=5 device type=DISK
    allocated channel: c2
    channel c2: SID=131 device type=DISK
    Starting restore at 08-NOV-12
    using channel ORA_DISK_1
    creating datafile file number=1 name=+DATA1/alephpr/datafile/system.269.722874729
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 11/08/2012 16:27:40
    ORA-01180: can not create datafile 1
    ORA-01110: data file 1: '+DATA1/alephpr/datafile/system.269.722874729' I created a new database from scratch with the same name as is in Production, later on I will proceed to rename it to the right one. I started the steps for refreshing the PRD copy:
    RMAN> shutdown immediate
    using target database control file instead of recovery catalog
    database dismounted
    Oracle instance shut down
    RMAN> startup nomount
    connected to target database (not started)
    Oracle instance started
    Total System Global Area 534462464 bytes
    Fixed Size 2228200 bytes
    Variable Size 176160792 bytes
    Database Buffers 348127232 bytes
    Redo Buffers 7946240 bytes
    RMAN> set dbid=3573460394
    executing command: SET DBID
    RMAN> restore controlfile from '/restorealeph/c-3573460394-20121106-01';
    Starting restore at 08-NOV-12
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=130 device type=DISK
    channel ORA_DISK_1: restoring control file
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
    +output file name=+DATA1/alephpr/controlfile/current.260.798747585+
    +output file name=+FLASH/alephpr/controlfile/current.276.798747585+
    Finished restore at 08-NOV-12
    RMAN> alter database mount;
    database mounted
    released channel: ORA_DISK_1Once the control file is restored, I need to crosscheck, delete expired and catalog the backups at the new server:
    RMAN> crosscheck backup;
    Crosschecked 48 objects
    RMAN> delete noprompt expired backup;
    Deleted 48 EXPIRED objects
    RMAN> list backup summary;
    specification does not match any backup in the repositoryI need now to catalog the backups we transferred from Prod into the QA server's directory /restorealeph:
    RMAN> catalog start with '/restorealeph/';
    searching for all files that match the pattern /restorealeph/
    List of Files Unknown to the Database
    =====================================
    File Name: /restorealeph/9cnpm51u_1_1
    File Name: /restorealeph/9enpm6lj_1_1
    File Name: /restorealeph/c-3573460394-20121107-00
    File Name: /restorealeph/c-3573460394-20121107-01
    File Name: /restorealeph/c-3573460394-20121106-01
    Do you really want to catalog the above files (enter YES or NO)? YES
    cataloging files...
    cataloging done
    List of Cataloged Files
    =======================
    File Name: /restorealeph/9cnpm51u_1_1
    File Name: /restorealeph/9enpm6lj_1_1
    File Name: /restorealeph/c-3573460394-20121107-00
    File Name: /restorealeph/c-3573460394-20121107-01
    File Name: /restorealeph/c-3573460394-20121106-01
    RMAN> list backup summary;
    List of Backups
    ===============
    Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
    4097    B  F  A DISK        07-NOV-12       1       1       NO         BACKUP_ALEPHPR.TUR_110712030000
    4098    B  A  A DISK        07-NOV-12       1       1       NO         BACKUP_ALEPHPR.TUR_110712030000
    RMAN> list backup tag="BACKUP_ALEPHPR.TUR_110712030000";
    List of Backup Sets
    ===================
    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    4097    Full    178.04G    DISK        00:00:00     07-NOV-12
            BP Key: 4097   Status: AVAILABLE  Compressed: NO  Tag: BACKUP_ALEPHPR.TUR_110712030000
            Piece Name: /restorealeph/9cnpm51u_1_1
      List of Datafiles in backup set 4097
      File LV Type Ckp SCN    Ckp Time  Name
      1       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/system.269.722874729
      2       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/sysaux.266.722874731
      3       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/undotbs1.289.722874727
      4       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/undotbs2.257.722874727
      5       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/users.298.722874731
      6       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/audit.299.723372305
      7       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/case_datos.260.723372307
      8       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/case_indices.261.723372307
      9       Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_hist.262.723372309
      10      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_l.264.723372319
      11      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_long.265.723372349
      12      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_md.270.723372355
      13      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_sm.271.723372369
      14      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_xl.272.723372375
      15      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/index_l.273.723372401
      16      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/index_md.274.723372427
      17      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/index_sm.275.723372455
      18      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/index_xl.276.723372473
      19      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/tools.278.723372501
      26      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/data_sm.300.736088959
      27      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/dev_disco_ptm5_meta.301.746385117
      28      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/dev_disco_pstore.302.746385119
      29      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/dev_disco_ptm5_cache.304.746385121
      30      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/undotbs1.305.796391931
      31      Full 6919879655786 07-NOV-12 +DATA1/alephpr/datafile/undotbs2.306.796392185
    BS Key  Size       Device Type Elapsed Time Completion Time
    4098    16.89G     DISK        00:00:00     07-NOV-12
            BP Key: 4098   Status: AVAILABLE  Compressed: NO  Tag: BACKUP_ALEPHPR.TUR_110712030000
            Piece Name: /restorealeph/9enpm6lj_1_1
      List of Archived Logs in backup set 4098
      Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
      1    35722   6919870864350 06-NOV-12 6919871887697 06-NOV-12
      1    35723   6919871887697 06-NOV-12 6919872372211 06-NOV-12
      1    35724   6919872372211 06-NOV-12 6919872410158 06-NOV-12
      1    35725   6919872410158 06-NOV-12 6919872447301 06-NOV-12
      1    35726   6919872447301 06-NOV-12 6919872503332 06-NOV-12
      1    35727   6919872503332 06-NOV-12 6919872551564 06-NOV-12
      1    35728   6919872551564 06-NOV-12 6919872603881 06-NOV-12
      1    35729   6919872603881 06-NOV-12 6919872655942 06-NOV-12
      1    35730   6919872655942 06-NOV-12 6919872698722 06-NOV-12
      1    35731   6919872698722 06-NOV-12 6919872741655 06-NOV-12
      1    35732   6919872741655 06-NOV-12 6919872782284 06-NOV-12
      1    35733   6919872782284 06-NOV-12 6919872872302 06-NOV-12
      1    35734   6919872872302 06-NOV-12 6919872910206 06-NOV-12
      1    35735   6919872910206 06-NOV-12 6919872945577 06-NOV-12
      1    35736   6919872945577 06-NOV-12 6919872980056 06-NOV-12
      1    35737   6919872980056 06-NOV-12 6919873013411 06-NOV-12
      1    35738   6919873013411 06-NOV-12 6919873050761 06-NOV-12
      1    35739   6919873050761 06-NOV-12 6919873084996 06-NOV-12
      1    35740   6919873084996 06-NOV-12 6919873122049 06-NOV-12
      1    35741   6919873122049 06-NOV-12 6919873521767 06-NOV-12
      1    35742   6919873521767 06-NOV-12 6919873952773 06-NOV-12
      1    35743   6919873952773 06-NOV-12 6919874258549 06-NOV-12
      1    35744   6919874258549 06-NOV-12 6919874472213 06-NOV-12
      1    35745   6919874472213 06-NOV-12 6919874744856 06-NOV-12
      1    35746   6919874744856 06-NOV-12 6919875113086 06-NOV-12
      1    35747   6919875113086 06-NOV-12 6919875733337 06-NOV-12
      1    35748   6919875733337 06-NOV-12 6919876139061 06-NOV-12
      1    35749   6919876139061 06-NOV-12 6919876707162 06-NOV-12
      1    35750   6919876707162 06-NOV-12 6919877706313 06-NOV-12
      1    35751   6919877706313 06-NOV-12 6919877919039 06-NOV-12
      1    35752   6919877919039 06-NOV-12 6919878024429 06-NOV-12
      1    35753   6919878024429 06-NOV-12 6919878107673 06-NOV-12
      1    35754   6919878107673 06-NOV-12 6919878258511 06-NOV-12
      1    35755   6919878258511 06-NOV-12 6919878308336 06-NOV-12
      1    35756   6919878308336 06-NOV-12 6919878424419 06-NOV-12
      1    35757   6919878424419 06-NOV-12 6919878488485 06-NOV-12
      1    35758   6919878488485 06-NOV-12 6919878827092 06-NOV-12
      1    35759   6919878827092 06-NOV-12 6919879350098 07-NOV-12
      1    35760   6919879350098 07-NOV-12 6919879675556 07-NOV-12
      2    35949   6919870864360 06-NOV-12 6919871494640 06-NOV-12
      2    35950   6919871494640 06-NOV-12 6919871887487 06-NOV-12
      2    35951   6919871887487 06-NOV-12 6919872410655 06-NOV-12
      2    35952   6919872410655 06-NOV-12 6919872552468 06-NOV-12
      2    35953   6919872552468 06-NOV-12 6919872698940 06-NOV-12
      2    35954   6919872698940 06-NOV-12 6919872872690 06-NOV-12
      2    35955   6919872872690 06-NOV-12 6919872980371 06-NOV-12
      2    35956   6919872980371 06-NOV-12 6919873085902 06-NOV-12
      2    35957   6919873085902 06-NOV-12 6919873569082 06-NOV-12
      2    35958   6919873569082 06-NOV-12 6919873949096 06-NOV-12
      2    35959   6919873949096 06-NOV-12 6919874404640 06-NOV-12
      2    35960   6919874404640 06-NOV-12 6919875011814 06-NOV-12
      2    35961   6919875011814 06-NOV-12 6919875631429 06-NOV-12
      2    35962   6919875631429 06-NOV-12 6919876324885 06-NOV-12
      2    35963   6919876324885 06-NOV-12 6919876363526 06-NOV-12
      2    35964   6919876363526 06-NOV-12 6919876748508 06-NOV-12
      2    35965   6919876748508 06-NOV-12 6919877741784 06-NOV-12
      2    35966   6919877741784 06-NOV-12 6919878108943 06-NOV-12
      2    35967   6919878108943 06-NOV-12 6919878424477 06-NOV-12
      2    35968   6919878424477 06-NOV-12 6919879012111 06-NOV-12
      2    35969   6919879012111 06-NOV-12 6919879260589 07-NOV-12
      2    35970   6919879260589 07-NOV-12 6919879350086 07-NOV-12
      2    35971   6919879350086 07-NOV-12 6919879464935 07-NOV-12
      2    35972   6919879464935 07-NOV-12 6919879548399 07-NOV-12
      2    35973   6919879548399 07-NOV-12 6919879675564 07-NOV-12
    RMAN> list incarnation;
    List of Database Incarnations
    DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
    1       1       ALEPHPR  3573460394       PARENT  1          13-MAY-10
    2       2       ALEPHPR  3573460394       PARENT  2229467    28-JUN-10
    3       3       ALEPHPR  3573460394       CURRENT 6918261828355 26-SEP-12The ASM structure is created...
    ASMCMD> lsdg
    State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
    MOUNTED EXTERN N 512 4096 1048576 509282 507421 0 507421 0 N DATA1/
    MOUNTED EXTERN N 512 4096 1048576 50641 42850 0 42850 0 N FLASH/
    ASMCMD> cd DATA1/ALEPHPR/DATAFILE
    ASMCMD> pwd
    +DATA1/ALEPHPR/DATAFILEBoth source and target databases are 11.2.0.2 PSU 6 running on Linux x64. I cannot use RMAN Duplicate since there is no visibility among different environments (PROD - QA in this case).
    Any idea?
    Thanks
    Martin
    Edited by: martin.morono on Nov 8, 2012 11:19 AM
    Edited by: martin.morono on Nov 8, 2012 11:49 AM

    Thanks Levi,
    I slightly modified your script to recatalog the backup pieces since they are note stored at the same location in PR and QA.
    No luck. The error message is different but the result is the same... it keeps failing.
    RMAN> run {
    2> allocate channel c1 device type disk;
    3> allocate channel c2 device type disk;
    4> restore controlfile from '/restorealeph/c-3573460394-20121107-01';
    5> startup mount;
    6> catalog start with '/restorealeph/';
    7> restore database from tag 'BACKUP_ALEPHPR.TUR_110712030000';
    8> }
    allocated channel: c1
    channel c1: SID=191 device type=DISK
    allocated channel: c2
    channel c2: SID=131 device type=DISK
    Starting restore at 09 NOV 2012 13:11:09
    channel c2: skipped, AUTOBACKUP already found
    channel c1: restoring control file
    channel c1: restore complete, elapsed time: 00:00:15
    output file name=+DATA1/alephpr/controlfile/current.260.798747585
    output file name=+FLASH/alephpr/controlfile/current.276.798747585
    Finished restore at 09 NOV 2012 13:11:24
    database is already started
    database mounted
    Starting implicit crosscheck backup at 09 NOV 2012 13:11:31
    Crosschecked 52 objects
    Finished implicit crosscheck backup at 09 NOV 2012 13:11:39
    Starting implicit crosscheck copy at 09 NOV 2012 13:11:39
    Crosschecked 2 objects
    Finished implicit crosscheck copy at 09 NOV 2012 13:11:40
    searching for all files in the recovery area
    cataloging files...
    cataloging done
    List of Cataloged Files
    =======================
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_2_seq_1.279.795017193
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_2_seq_34950.273.795014469
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_1.281.795017413
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_2.283.795017519
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_3.290.795018411
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_4.291.795018559
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_5.292.795018707
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_6.293.795018811
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_7.294.795018899
    File Name: +flash/ALEPHPR/ARCHIVELOG/2012_09_26/thread_1_seq_8.295.795020509
    File Name: +flash/ALEPHPR/CONTROLFILE/Current.268.798725123
    searching for all files that match the pattern /restorealeph/
    List of Files Unknown to the Database
    =====================================
    File Name: /restorealeph/9cnpm51u_1_1
    File Name: /restorealeph/9enpm6lj_1_1
    File Name: /restorealeph/c-3573460394-20121107-00
    File Name: /restorealeph/c-3573460394-20121107-01
    File Name: /restorealeph/c-3573460394-20121106-01
    Do you really want to catalog the above files (enter YES or NO)? YEs
    cataloging files...
    cataloging done
    List of Cataloged Files
    =======================
    File Name: /restorealeph/9cnpm51u_1_1
    File Name: /restorealeph/9enpm6lj_1_1
    File Name: /restorealeph/c-3573460394-20121107-00
    File Name: /restorealeph/c-3573460394-20121107-01
    File Name: /restorealeph/c-3573460394-20121106-01
    Starting restore at 09 NOV 2012 13:11:48
    released channel: c1
    released channel: c2
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 11/09/2012 13:11:48
    RMAN-06026: some targets not found - aborting restore
    RMAN-06023: no backup or copy of datafile 31 found to restore
    RMAN-06023: no backup or copy of datafile 30 found to restore
    RMAN-06023: no backup or copy of datafile 29 found to restore
    RMAN-06023: no backup or copy of datafile 28 found to restore
    RMAN-06023: no backup or copy of datafile 27 found to restore
    RMAN-06023: no backup or copy of datafile 26 found to restore
    RMAN-06023: no backup or copy of datafile 19 found to restore
    RMAN-06023: no backup or copy of datafile 18 found to restore
    RMAN-06023: no backup or copy of datafile 17 found to restore
    RMAN-06023: no backup or copy of datafile 16 found to restore
    RMAN-06023: no backup or copy of datafile 15 found to restore
    RMAN-06023: no backup or copy of datafile 14 found to restore
    RMAN-06023: no backup or copy of datafile 13 found to restore
    RMAN-06023: no backup or copy of datafile 12 found to restore
    RMAN-06023: no backup or copy of datafile 11 found to restore
    RMAN-06023: no backup or copy of datafile 10 found to restore
    RMAN-06023: no backup or copy of datafile 9 found to restore
    RMAN-06023: no backup or copy of datafile 8 found to restore
    RMAN-06023: no backup or copy of datafile 7 found to restore
    RMAN-06023: no backup or copy of datafile 6 found to restore
    RMAN-06023: no backup or copy of datafile 5 found to restore
    RMAN-06023: no backup or copy of datafile 4 found to restore
    RMAN-06023: no backup or copy of datafile 3 found to restore
    RMAN-06023: no backup or copy of datafile 2 found to restore
    RMAN-06023: no backup or copy of datafile 1 found to restore
    RMAN>Just in case, I re-run this script including the crosscheck backup and the delete noprompt expired backups before restoring an the error messages were the same.
    THanks again for your help.
    Regards.
    Martin
    Edited by: martin.morono on Nov 9, 2012 7:21 AM

  • Can validations  be done inside  FOR ALL and can we use conventional insert

    Hi All,
    I have to move millions of data from one 'table1' to ' table 2'. Table 2 is equal Table 1 columns+ an extra column . data for the extra column is retrieved from table 3 using foreign keys of table 3 and table 1.how shud i do it using bulk collect and for all insert... I have given the sample code for my problem..
    TABLES:
    table 1 columns: emp_name, emp_id , emp_add, emp_txt
    table 2 columns: emp_name, emp_id, emp_add,emp_txt,emp_ref
    table 3 column: emp_txt,emp_ref,emp_size
    CODE:
    create or replace
    procedure bulk_proc IS
    v_emp_ref varchar2(20);
    cursor cur_t1 is
    select * from table 1;
    TYPE bulk_t1 is table of cur_t1%rowtype;
    v_bulk_t1 bulk_t1;
    cursor cur_t3 is
    select a.emp_txt,b.emp_ref from table 1 a, table 3 b where a.emp_txt = b.emp_txt;
    TYPE bulk_t3 is table of cur_t3%rowtype;
    v_bulk_t3 bulk_t3;
    begin
    open cur_t1;
    open cur_t3;
    loop
    fetch cur_t1 bulk collect into v_bulk_t1 ;
    exit when v_bulk_t1.count=0;
    fetch cur_t3 bulk collect into v_bulk_t3 ;
    exit when v_bulk_t3.count=0;
    for i in v_bulk_t1.first..v_bulk_t1.last loop
    for j in v_bulk_t3.first..v_bulk_t3.last loop
    if (v_bulk_t1(i).emp_txt = v_bulk_t3(j).emp_txt) then
    v_emp_ref := v_bulk_t1(i).emp_txt ;
    else
    v_emp_ref := null;
    end if;
    for all m in 1..v_bulk_t1.count
    insert into t2(emp_name, emp_id, emp_add,emp_txt,emp_ref) values
    (v_bulk_t1(m).emp_name,
    v_bulk_t1(m).emp_id,
    v_bulk_t1(m).emp_add,
    v_bulk_t1(m).emp_txt,
    v_emp_ref);
    end loop;
    end loop;
    end loop;
    close cur_t3;
    close cur_t1;
    end bulk_proc;
    can we do validations inside FOR ALL command..i am getting error.is it possible to use conventional insert inside 'for all command' or do we have to use only 'insert ti values v_bulk_t1(i)' like that....Do i have to use only conventional cursor for this problem?...please help me..

    1.I want to push 18 million records from one table to another table with validations....Can i use ur code for it? You can always test how the example Tubby provided works in your environment.
    Usually a single SQL statement is the right way to go.
    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:760210800346068768
    (memorize the mantra)
    Another option you have is to use CTAS (Create Table ... As Select ...) or use the APPEND hint while inserting.
    Make sure first that you understand how it works:
    You can find many examples including clear explanations by doing a search on http://asktom.oracle.com
    2.Can we do normal insert and validations inside FOR ALL insert loop... Afaik, you cannot. ( But it wouldn't surprise me if Michael comes up with an example using dynamic SQL ;) )
    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/forall_statement.htm#LNPLS01321
    Alternatively you should investigate if it's possible to adjust your query/queries in such a way so that only records that you want to insert are selected.
    In other words: use the WHERE-clause from your query to validate rightaway instead of selecting records thatyou don't want/need at all.
    3.How variables are stored in BULK COLLECT ..Is it storing pattern differs from cursor.......Sorry, I don't understand what you mean here.
    4.In which scenarios we should not use COLLECTIONS ...Please help me...That's totally dependent of the scenario/requirement.
    Example:
    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1058232381458

  • ORA-01461: can bind a LONG value only for insert into a LONG column in 11.2

    Hello,
    We have been getting the following exception when we try to save an XML (>5k).
    SQL state [72000]; error code [1461]; ORA-01461: can bind a LONG value only for insert into a LONG column
    This is occurring only for Oracle 11g (11.2.0.1.0)
    Our column is CLOB type, not LONG type.
    Could anyone please suggest what could be the reason and fix?
    Thanks in advance
    --Cheers
    paruvid

    Thanks for quick response!!
    Inserting throw JDBC (Spring jdbcTemplate)
    using the ojdbc6.jar as driver
    here is the stask strace
    Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO tabl1(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,c16(CLOBCOL),c17, c18, c19) SELECT c1,c2, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? FROM table2 S JOIN table1 D ON S.c1 = D.c1 WHERE S.c2 = ? AND D.c5 = ? GROUP BY S.c1];
    SQL state [72000]; error code [1461]; ORA-01461: can bind a LONG value only for insert into a LONG column
    ; nested exception is java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:786)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:842)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:846)
    at com.smartstream.cms.message.dao.SSIMessageDao.editSSIInstance(SSIMessageDao.java:522)
    ... 52 more
    Caused by: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column
    Edited by: paruvid on Aug 9, 2011 5:07 AM
    Edited by: paruvid on Aug 9, 2011 5:17 AM
    Edited by: paruvid on Aug 9, 2011 5:23 AM

  • Can we do Dml statements on materialize views

    I want to know can we do Dml statements on materialize views .If yes, how

    Can you? Maybe. Depends on how you created the materialized view. Should you? Maybe. Are you running a multi-master environment? Or are you using materialized views for one-way replication? If you are doing one-way replication, do you want your DML changes to be retained beyond the next refresh of the materialized view?
    Justin

Maybe you are looking for