Regd:-immediate execution

Hello

WHEN I EXECUTE THE QUERY I get PLSQL /Numeric or the error value. Suggestions are welcome.


DECLARE
CURSOR c1
IS
SELECT object_name, object_type, owner
Of object
WHERE object_type IN ('PACKAGE')
AND object_name = 'PKG_UPLOAD. '
AND owner = 'TEST ';

lv_v_header VARCHAR2 (2000): = ' SELECT DBMS_METADATA. GET_DDL (';)
lv_v_footer VARCHAR2 (200): = ') FROM DUAL';
lv_v_object_type all_objects.object_type%TYPE;
lv_v_object_name all_objects.object_name%TYPE;
lv_v_owner all_objects.owner%TYPE;
lv_v_stmt VARCHAR2 (4000);
lv_v_quotes VARCHAR2 (100): = "';
lv_v_comma VARCHAR2 (100): = ', ';
lv_v_value VARCHAR2 (32767).
fileHandler UTL_FILE.file_type;
lv_v_file_name VARCHAR2 (3000);
BEGIN
I'm IN c1
LOOP
BEGIN
lv_v_file_name: =.
i.Owner
|| '_'
|| i.object_name
|| CASE
WHEN i.object_type = "PACKAGE".
THEN '. PKB'
WHEN i.object_type = 'TRIGGER '.
THEN '. TRG'
END;
lv_v_object_type: = i.object_type;
lv_v_object_name: = i.object_name;
lv_v_owner: = i.owner;
lv_v_stmt: =.
lv_v_header
|| lv_v_quotes
|| lv_v_object_type
|| lv_v_quotes
|| lv_v_comma
|| lv_v_quotes
|| lv_v_object_name
|| lv_v_quotes
|| lv_v_comma
|| lv_v_quotes
|| lv_v_owner
|| lv_v_quotes
|| lv_v_footer;

Lv_v_stmt EXECUTE IMMEDIATE
IN lv_v_value;

fileHandler: = UTL_FILE.fopen ("TEST_DIR', lv_v_file_name, 'w');
UTL_FILE.PUTF (filehandler, lv_v_value |) » \n');
UTL_FILE.fclose (filehandler);
END;
END LOOP;
END;
/

In case you need help to use UTL_FILE, then this is.

SQL> DECLARE
  2    myddl clob;
  3    fname VARCHAR2(200);
  4    extn VARCHAR2(200);
  5
  6  /* Main function to get the DDls with DBMS_METADATA */
  7    FUNCTION get_metadata(pi_obj_name  dba_objects.object_name%TYPE,
  8                          pi_obj_type  IN dba_objects.object_type%TYPE,
  9                          pi_obj_owner IN dba_objects.owner%TYPE) RETURN clob IS
 10      h   number;
 11      th  number;
 12      doc clob;
 13    BEGIN
 14      h := DBMS_METADATA.open(pi_obj_type);
 15      DBMS_METADATA.set_filter(h, 'SCHEMA', pi_obj_owner);
 16      DBMS_METADATA.set_filter(h, 'NAME', pi_obj_name);
 17      th := DBMS_METADATA.add_transform(h, 'MODIFY');
 18      th := DBMS_METADATA.add_transform(h, 'DDL');
 19      --DBMS_METADATA.set_transform_param(th,'SEGMENT_ATTRIBUTES',false);
 20      doc := DBMS_METADATA.fetch_clob(h);
 21      DBMS_METADATA.CLOSE(h);
 22      RETURN doc;
 23    END get_metadata;
 24
 25  ---Writing the CLOB using UTL_FILE
 26  PROCEDURE write_clob(p_clob in clob, pi_fname VARCHAR2) as
 27      l_offset number default 1;
 28      fhandle UTL_FILE.file_type;
 29      buffer VARCHAR2(4000);
 30    BEGIN
 31      fhandle:=UTL_FILE.fopen('SAUBHIK',pi_fname,'A');
 32      loop
 33        exit when l_offset > dbms_lob.getlength(p_clob);
 34        buffer:=dbms_lob.substr(p_clob, 255, l_offset);
 35        UTL_FILE.put_line(fhandle,buffer);
 36        l_offset := l_offset + 255;
 37        buffer:=NULL;
 38      end loop;
 39      UTL_FILE.fclose(fhandle);
 40    END write_clob;
 41
 42  ---Main execution begins.
 43  BEGIN
 44    FOR i in (SELECT object_name, object_type, owner
 45                FROM dba_objects
 46               WHERE owner IN ('SCOTT', 'HR')
 47                 AND object_type IN ('PACKAGE', 'TRIGGER')) LOOP
 48      --Calling the function.
 49      myddl := get_metadata(i.object_name,i.object_type,i.owner);
 50      --Preparing the filename.
 51      fname := i.owner||i.object_name || '.' ||
 52               CASE WHEN i.object_type='PACKAGE' THEN 'pkb'
 53               ELSE 'trg'
 54               END;
 55     --Writing the file using UTL_FILE.
 56      write_clob(myddl,fname);
 57    END LOOP;
 58  END;
 59  /

PL/SQL procedure successfully completed.

SQL> 

also, about your mistake, "EXECUTE IMMEDIATE lv_v_stmt INTO lv_v_value; DBMS_METADATA.get_dll returns a CLOB.

Tags: Database

Similar Questions

  • Changing table via the package with immediate execution (problem)

    Hello

    I have a unusual problem. I have a package that contains the procedure that via execute immediate statement, creates a table on which he performs different actions for example:

    -alter table some_owner.dummy_table noparallel

    -create index some_owner.idx_name on some_owner.dummy_table (column)...

    But I only managed to run move and create synonym table/public via execute immediate statement. Actions as alter table and create index fails with error ORA-01031: insufficient privileges.

    Note If call these commands outside the package (a simple script) this all done OK.

    I found a way, where I set the AUTHID CURRENT_USER command create package statement. In this way all the actions executed OK.

    I wonder why I can't change the table via the package with immediate execution on a table that is in the tablespace "SOME_TABLESPACE" and the title of owner "SOME_OWNER", without putting the AUTHID command on the package.

    There must be a problem why a package cannot change the table which is owned by the user 'SOME_OWNER '.

    All useful responses would be appreciated.

    I have a unusual problem.

    No - you don't have. This question has been answered SEVERAL times on this forum and others.

    But I only managed to run move and create synonym table/public via execute immediate statement. Actions as alter table and create index fails with error ORA-01031: insufficient privileges.

    OK - your username doesn't have privileges to do these operations or only received privileges through roles.

    Roles are DISABLED in named PL/SQL blocks that use of the AUTHOR's rights.

    Note If call these commands outside the package (a simple script) this all done OK.

    I found a way, where I set the AUTHID CURRENT_USER command create package statement. In this way all the actions executed OK.

    Of course - the roles are NOT disabled in named PL/SQL blocks that use the rights of the APPELLANT or in anonymous blocks.

    I wonder why I can't change the table via the package with immediate execution on a table that is in the tablespace "SOME_TABLESPACE" and the title of owner "SOME_OWNER", without putting the AUTHID command on the package.

    Well now you know!

  • SQL dynamic immediate execution

    Hi all

    We have a table where we keep the query that will be executed and using bind variables.

    But im facing some problems when I try to use it in immediate execution.

    guess

    function validate is
    varaux varchar2 (200);
    Start
    for r1 in (select query,
    using_bind
    from table_1) loop
    run immediately r1.query in varaux using r1.using_bind;
    Return varaux;
    end loop;
    Returns a null value.
    end;

    I know that's not the way to do it, but can you give me instructions in the topic...

    Thank you
    Bruna

    Published by: Bruna on January 4, 2013 03:07

    >
    We have a table where we keep the query that will be executed and using bind variables.

    But im facing some problems when I try to use it in immediate execution.
    >
    No - the problems you are experiencing are because your function uses invalid syntax. The problems have NOTHING to do with 'run immediately '. This works for me and no changes have been made to the dynamic part.

    create or replace function fn_validate return varchar2 is
    varaux varchar2(200);
    begin
    for r1 in (select 'select ename from emp where empno = :1' query,
    7369 using_bind from dual) loop
    execute immediate r1.query into varaux using r1.using_bind;
    return varaux;
    end loop;
    return null;
    end; 
    
    declare
     myVar varchar2(200);
    begin
     myVar := fn_validate();
     dbms_output.put_line(myVar);
    end;
    
    SMITH
    
  • How how to escape double match in immediate execution in the trigger

    Hi all

    Please inform me what is the error in this procedure.
    I think that the problem in the way to escape double match.

    SQL > create or replace procedure P2
    2 is
    3. start
    4 run immediately 'create or replace trigger t2.
    5 |' before insertion '
    6: ' on tb_test'
    7: ' for each row '
    8: ' declare '
    9: ' start '
    * 10 |' immediate execution "create table t1 as select distinct (NVL (soundex (namess),"'NONE "')) test ' *;
    11: ' end; »
    12 end;
    13
    14.

    CAUTION: Procedure created with compilation errors.

    SQL > show error
    Errors of PROCEDURE P2:

    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    10/83 PLS-00103: encountered the symbol "NONE" when expecting one of
    What follows:
    * & = - + ; <>/ is mod remains not return rem
    return < an exponent (*) > <>or! = or ~ = > = < = <>and or
    as like2 like4 likec between using | Member in bulk
    submultiset

    SQL >

    Hello

    Try the code below:

    create or replace procedure P2
    is
    Start
    run immediately "create or replace trigger t2 before insertion
    on tb_test
    for each line
    declare
    Start
    run immediately "create table t1 as select distinct (NVL (soundex (account_number),"NONE")) of the test";
    end;';
    end;
    /

  • Appeal procedure set up by IMMEDIATE EXECUTION

    SQL> Create table bipul_test (a number(3), b number(2), c number(5), d varchar2(10), status varchar2(10));
    
    Table Created.
    
    SQL> desc bipul_test
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     A                                                  NUMBER(3)
     B                                                  NUMBER(2)
     C                                                  NUMBER(5)
     D                                                  VARCHAR2(10)
     STATUS                                             VARCHAR2(10)
    
    
    SQL> insert into bipul_test values(1,1,1,'a', null);
    SQL> insert into bipul_test values(1,1,1,'b', null);
    SQL> insert into bipul_test values(2,1,2,'c', null);
    SQL> insert into bipul_test values(2,2,2,'d', null);
    SQL> insert into bipul_test values(null, null, null, 'x',null);
    SQL> commit;
    
    SQL> select * from bipul_test;
    
             A          B          C D          STATUS
    ---------- ---------- ---------- ---------- ----------
             1          1          1 a          
             1          1          1 b          
             2          1          2 c          
             2          2          2 d
                                     x
    Package: my_package
    Procedure: proc2, proc3
    CREATE OR REPLACE PACKAGE SRGUPTA.my_package AS
        -- PROCEDURE proc2;
        PROCEDURE proc2 (status OUT varchar2);
        PROCEDURE proc3 (Proc_name IN VARCHAR2, status IN OUT varchar2);
    END my_package;
    
    /
    
    CREATE OR REPLACE PACKAGE BODY SRGUPTA.my_package
    IS
    -- PROCEDURE proc2
    PROCEDURE proc2(status OUT varchar2)
    AS
    n number(2);
       BEGIN
         update bipul_test set status ='SUCCESS' where A=1;
         commit;
         status:='FAILURE';
    end proc2;
    
    PROCEDURE proc3 (proc_name varchar2, status IN OUT varchar2)
    AS
    x varchar2(100):=null;
       BEGIN
         --EXECUTE IMMEDIATE 'BEGIN '||proc_name||'; END;';
         EXECUTE IMMEDIATE 'BEGIN '||proc_name||'(status); END;';
         
         if status='FAILURE' then
            update bipul_test set status ='FAILURE' where A=2;
            commit;
         end if;
    end proc3;
    END  my_package;
    /
    The Code of the appellant:
    set feedback on
    set serveroutput on
    DECLARE status VARCHAR2(100):='';
     begin
    my_package.proc3('my_package.proc2', status);
    end;
    /
    EXIT;
    Without THE normal execution mode param works very well. Above code is an effort through which I tried to capture the value of OUT to the appellant PROC3 param.

    PROC3 call PROC2 with immediate execution. Now if PROC2 have a parameter OUT and I want to capture in PROC3, is it possible?

    Out of desire to my code:
    SQL> select * from bipul_test;
    
             A          B          C D          STATUS
    ---------- ---------- ---------- ---------- ----------
             1          1          1 a          SUCCESS
             1          1          1 b          SUCCESS
             2          1          2 c          FAILURE
             2          2          2 d           FAILURE
                                    x
    Published by: handsome June 3, 2011 06:29
    SQL> Create table bipul_test (a number(3), b number(2), c number(5), d varc
    (10));
    
    Table created.
    
    SQL> insert into bipul_test values(1,1,1,'a', null);
    
    1 row created.
    
    SQL>
    SQL> insert into bipul_test values(1,1,1,'b', null);
    
    1 row created.
    
    SQL> insert into bipul_test values(2,1,2,'c', null);
    
    1 row created.
    
    SQL> insert into bipul_test values(2,2,2,'d', null);
    
    1 row created.
    
    SQL> insert into bipul_test values(null, null, null, 'x',null);
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from bipul_test;
    
             A          B          C D          STATUS
    ---------- ---------- ---------- ---------- ----------
             1          1          1 a
             1          1          1 b
             2          1          2 c
             2          2          2 d
                                     x
    
    SQL> CREATE OR REPLACE PACKAGE my_package AS
      2    -- PROCEDURE proc2;
      3    PROCEDURE proc2(status OUT varchar2);
      4    PROCEDURE proc3(Proc_name IN VARCHAR2, status IN OUT varchar2);
      5  END my_package;
      6  /
    
    Package created.
    
    SQL> CREATE OR REPLACE PACKAGE BODY my_package
      2  IS
      3  -- PROCEDURE proc2
      4  PROCEDURE proc2(status OUT varchar2)
      5  AS
      6  n number(2);
      7     BEGIN
      8   update bipul_test set status ='SUCCESS' where A=1;
      9   commit;
     10   status:='FAILURE';
     11  end proc2;
     12
     13  PROCEDURE proc3 (proc_name varchar2, status IN OUT varchar2)
     14  AS
     15  x varchar2(100):=null;
     16     BEGIN
     17   --EXECUTE IMMEDIATE 'BEGIN '||proc_name||'; END;';
     18   EXECUTE IMMEDIATE 'BEGIN '||proc_name||'(:1); END;' USING IN OUT status;
     19
     20   if status='FAILURE' then
     21      update bipul_test set status ='FAILURE' where A=2;
     22      commit;
     23   end if;
     24  end proc3;
     25  END  my_package;
     26  /
    
    Package body created.
    
    SQL> set serverout on
    SQL> DECLARE
      2  status VARCHAR2(100):='';
      3   begin
      4  my_package.proc3('my_package.proc2', status);
      5  dbms_output.put_line(status);
      6  end;
      7  /
    FAILURE
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    
  • difference btw dbms_sql.execution and immediate execution

    Hello

    IAM using 10g, difference btw immediate.please dbms_sql.execution and execution to tell me.

    797525 wrote:

    IAM using 10g, difference btw immediate.please dbms_sql.execution and execution to tell me.

    SQL all (and all the anonymous PL/SQL blocks) are analyzed by Oracle as a SQL cursors. These cursor structures are stored in the Shared Pool in the SGA (shared memory area which are essentially the "brain" of the database instance).

    Once a cursor was created for a statement SQL, how to use and interface with this SQL cursor on the server (from the point of view of the customer)?

    We use on the client side, a calling interface (or API) that allows our code to interact with this SQL cursor on the server. This interface can be ODBC. Or BDE. Or ADO. Or many other 3-4 letters for database interfaces.

    PL/SQL is also a language of 'customer' from a SQL perspective. Such as Java and c#, the code PL/SQL will be calls to the SQL engine to analyze and create SQL cursors.

    Of course, PL/SQL differs in 2 areas. It runs in the process of the Oracle server. It is the neighbour of the SQL engine.

    For this reason, PL/SQL is much more perfectly integrated with the SQL than Java or c#.

    But even in spite of this integration, you still need an interface in the client (PL/SQL) to interact with the SQL cursor, that you have created. In PL/SQL, there are a number of such interfaces customer.

    There are explicit and implicit cursors. And there are sliders DBMS_SQL and reference. And there are implicit cursors created through immediate enforcement.

    The difference between DBMS_SQL and immediate execution is therefore a difference in customer language interface. The SQL cursor on the server (in the shared Pool) doesn't know what customer interface is used. He cares not.

    Client side, each of these client interfaces to a SQL cursor has a different function. And determines which one to use.

    run immediately , it's fast and easy for dynamic SQL, but it cannot be used to determine the structure (called projection SQL) returned by a cursor to Select . So despite the dynamic SQL code, we must always know the encoding of time, just what this slider will return to consume its production.

    DBMS_SQL to 'describe' the cursor SQL projection. So, we can create a dynamic Select SQL cursor. We can question its interface describe in order to determine the number, names and the data types of the columns returned. It can be removed these column values dynamically and consume the cursor.

    There are therefore a major difference in the two feature sets. Tools for interfacing with the same SQL cursor.

    So the main points to remember are:
    -all SQL liquidation as SQL cursors on the server
    -you have different interfaces in the language of the client to interact with a SQL cursor

    ++

    Your mission as a programmer, if you choose to accept it, is to determine which of these client interfaces is better suited to meet the requirements in your code.

    This message will self-destruct in... 5.4.3 2...

  • Update in immediate execution with rownum

    Can I put in an UPDATE by immediate execution that only maximum 10 lines will be updated?

    It is:
       EXECUTE IMMEDIATE 'UPDATE A_PAZIENTI_ESAMI SET  '||
                        ' NREFERTO      = :1, '|| 
                        ' DATA_REFERTO  = :2, '|| 
                        ' ANNOREFERTO   = :3, '|| 
                        ' DATA_EROGAZ   = :4, '|| 
                        ' STATO_REFERTO = :5, '|| 
                        ' MEDICO_E      = :6  '|| 
                        ' WHERE '|| WHERE_CLAUSE_ESA  
    --
    || ' and rownum <= 10'   -- this is my doubt
    
    --
    
       USING    AP_REFERTOB.NREFERTO,
                        AP_REFERTOB.DATARF, 
                        EXTRACT (YEAR FROM AP_REFERTOB.DATARF) ,
                        AP_REFERTOB.DATAEROGA,
                        STATOREFERTO,
                        AP_REFERTOB.K_MED;
       COMMIT;
    Thanks in advance

    Hello
    your query works very well. It updates only the first 10 rows based on the place where the condition.

    Thank you.

  • sql dynamic and immediate execution

    Hello all;

    Just curious... Why developers are still using dynamic sql... and run immediately, because I always thought that dynamic sql were negative and the use of immediate execution as well...

    or did I miss something...

    I like this white paper on the topic: SQL in PL/SQL
    http://www.Oracle.com/technetwork/database/features/PLSQL/overview/doing-SQL-from-PLSQL-129775.PDF

  • HELP-immediate execution in PL/SQL has received the error ORA-00904: invalid identifier

    What is the problem with the following codes from PL/SQL (actually it comes to Oracle Metalink Note: 313175.1):
    ===========
    declare
    cursor c1 is select * from $ semantic;
    v_statement VARCHAR2 (255);
    v_nc number (10);
    v_nt number (10);
    Start
    immediate execution
    "select count (*) from $ semantics" in v_nc;
    immediate execution
    ' select count (distinct s_table_name) of semantics$ "in v_nt;
    dbms_output.put_line
    ('Edit' | v_nc |) 'columns ' | v_nt | "tables");
    to r1 c1 loop
    v_statement: = 'ALTER TABLE ' | R1.s_owner | '.' || R1.s_table_name;
    v_statement: = v_statement | «change (' |)» R1.s_column_name | ' ';
    v_statement: = v_statement | R1.s_data_type | ' (' | r1.s_char_length;)
    v_statement: = v_statement | ' CHAR))';
    immediately run v_statement;
    end loop;
    dbms_output.put_line ('Done');
    end;
    /
    =====
    Executed once the codes as sysdba against 10gr 2 database, I got this error:
    From build to select columns to change
    Editing columns 4428 35249
    declare
    *
    ERROR on line 1:
    ORA-00904: invalid identifier
    ORA-06512: at line 22

    I see nothing wrong with the line of "immediate execution". I appreciate your help!

    Thank you.

    Hello
    Try to print the offending instruction using exception, I used small test cases by changing the pl/sql block, you may need to change to respond to all other types of data in this table.

    CREATE TABLE semantics$
    AS
       SELECT USER AS owner,
              table_name,
              data_type AS s_data_type,
              column_name,
              data_length AS s_char_length
       FROM cols
       WHERE table_name = 'MY_OBJECTS';
    
    DECLARE
       CURSOR c1
       IS
          SELECT *
          FROM semantics$;
    
       v_statement   VARCHAR2 (255);
       v_nc          NUMBER (10);
       v_nt          NUMBER (10);
    BEGIN
       EXECUTE IMMEDIATE 'select count(*) from semantics$' INTO v_nc;
    
       EXECUTE IMMEDIATE 'select count(distinct table_name) from semantics$'
          INTO v_nt;
    
       DBMS_OUTPUT.put_line(   'ALTERing '
                            || v_nc
                            || ' columns in '
                            || v_nt
                            || ' tables');
    
       FOR r1 IN c1
       LOOP
          v_statement   := 'ALTER TABLE ' || r1.owner || '.' || r1.table_name;
          v_statement   := v_statement || ' modify (' || r1.column_name || ' ';
          v_statement   :=
             v_statement || r1.s_data_type || '(' || r1.s_char_length;
    
          IF (r1.s_data_type = 'NUMBER')
          THEN
             v_statement   := v_statement || '))';
          ELSE
             v_statement   := v_statement || ' CHAR))';
          END IF;
    
          DBMS_OUTPUT.put_line (v_statement);
    
          -- EXECUTE IMMEDIATE v_statement;
       END LOOP;
    
       DBMS_OUTPUT.put_line ('Done');
    EXCEPTION
       WHEN OTHERS
       THEN
          DBMS_OUTPUT.put_line ('Statement = ' || v_statement);
          DBMS_OUTPUT.put_line (SUBSTR (SQLERRM, 1, 200));
          RAISE;
    END;
    

    _ Output

    ALTERing 13 columns in 1 tables
    ALTER TABLE MY_OBJECTS modify (OWNER VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (OBJECT_NAME VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (SUBOBJECT_NAME VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (OBJECT_ID NUMBER(22))
    ALTER TABLE MY_OBJECTS modify (DATA_OBJECT_ID NUMBER(22))
    ALTER TABLE MY_OBJECTS modify (OBJECT_TYPE VARCHAR2(19 CHAR))
    ALTER TABLE MY_OBJECTS modify (CREATED DATE(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (LAST_DDL_TIME DATE(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (TIMESTAMP VARCHAR2(19 CHAR))
    ALTER TABLE MY_OBJECTS modify (STATUS VARCHAR2(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (TEMPORARY VARCHAR2(1 CHAR))
    ALTER TABLE MY_OBJECTS modify (GENERATED VARCHAR2(1 CHAR))
    ALTER TABLE MY_OBJECTS modify (SECONDARY VARCHAR2(1 CHAR))
    Done
    

    Concerning

    Published by: OrionNet on January 5, 2009 23:53

    Published by: OrionNet on January 5, 2009 23:55

  • Procedure failed with ORA-01403, associated with immediate execution, captured

    This procedure compiles without error. Its purpose is to copy the sequence of one schema to another object. After it failed with ORA-01403, I added exception code of capture (see the comments in the code).

    A few notes:

    1. I started the proceedings with exec copy_sequence ('ADDRESS_SEQ', 'SST', 'TEST1');

    2. the first sql string is built correctly since I can see in the console output:

    Select last_number in the all_sequences where sequence_owner = upper('TSS') and upper('ADDRESS_SEQ') = sequence_name

    I can run this SQL command, and returns a real value;

    Here is the procedure

    SET SERVEROUTPUT ON;

    create or replace procedure copy_sequence (seq VARCHAR2, prod_schema VARCHAR2, VARCHAR2 test_schema)

    as

    Val number (21);

    s_sql varchar2 (200);

    Start

    s_sql: = ' select last_number in the all_sequences where sequence_owner = upper('''|| prod_schema ||'') ') and sequence_name = upper('''||) Seq | " ')';

    -immediate' select last_number in the Vale of all_sequences where sequence_owner = upper('''|| prod_schema ||'') ') and sequence_name = upper('''||) Seq | " ')';

    Dbms_output.put_line ('sql 1 ' | s_sql);

    execute immediate s_sql in val;  ---!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! The code does not work here!

    Dbms_output.put_line ('val' |) Val);

    s_sql: = 'delete the sequence'. test_schema |'. ' || FF.;

    Dbms_output.put_line ('sql 2 ' | s_sql);

    -execution immediate s_sql;

    s_sql: = 'create the sequence'. test_schema |'. ' || Seq |' minvalue maxvalue 1 999999999999999999999 begin by ' | Val | 'increment of 1';

    Dbms_output.put_line ('sql 3 ' | s_sql);

    -execution immediate s_sql;

    -Add the following after procedure thown ORA-01403: no data found

    exception when TOO_MANY_ROWS then DBMS_OUTPUT.put_line ('TOO_MANY_ROWS error');

    When NO_DATA_FOUND then DBMS_OUTPUT.put_line ('error NO_DATA_FOUND');

    While some other then raise_application_error (-20011, "Unknown Exception in this procedure");

    end;

    /

    Hoek wrote:

    The user (no SYSTEM, SYS, and SYSTEM are special, you should not use them unless you have TO) execution of the procedure must have the necessary privileges granted directly, bypassing a role...

    ??? There is nothing special about SYS or SYSTEM in what concerns them stored procedures. SYS by default is granted directly SELECT ANY SEQUENCE, so it does not work for the owner of MS by SYS. SYSTEM is therefore not:

    Scott@pdborcl12 > create sequence s;

    Order of creation.

    Scott@pdborcl12 > create or replace
    2 procedure system.p1
    3 is
    number of v_last_value 4;
    5. start
    6. Select last_number
    7 in v_last_value
    8 of all_sequences
    9 where sequence_owner = 'SCOTT '.
    10 and s = sequence_name ';
    11 end;
    12.

    Created procedure.

    Scott@pdborcl12 > system.p1 exec.
    BEGIN system.p1; END;

    *
    ERROR on line 1:
    ORA-01403: no data found
    ORA-06512: at "SYSTEM. "P1", line 5
    ORA-06512: at line 1

    Scott@pdborcl12 > grant select on s to the system;

    Grant succeeded.

    Scott@pdborcl12 > system.p1 exec.

    PL/SQL procedure successfully completed.

    Scott@pdborcl12 >

    SY.

  • simultaneous immediate execution of multiple instructions?

    are there techniques to call execute immediate instructions so that they could run simultaneously without waiting than the previous ones (can be different "background", in sessions but at the same time)?

    for example if I write:
    declare
      stmt_1 varchar2(100) := 'update ... 1 .. ';
      stmt_2 varchar2(100) := 'update ... 2 .. ';
      ...
      stmt_n varchar2(100) := 'update ... n .. ';
    begin
      execute immediate stmt_1;
      execute immediate stmt_2;
      ...
      execute immediate stmt_n;
    end;
    stmt_1 runs first, then stmt_2 and so on. is there a technique to rewrite it so that these statements would be sent for execution without waiting for the other, IE. Here stmt_2 Wouln't expect stmt_1 finish, stmt_3 for stmt_2 etc. I know autonomous operations, but I have no idea if they could be included as well as some other techniques (if any).

    I'd appreciate any advice if this scenario can be coded somehow.

    Thank you

    You can use something like DBMS_SCHEDULER program each of them as to the work to be performed immediately. Schedules would be started one after the other, but each calendar can be made without waiting for the other end.

    There is also the DBMS_PARALLEL_EXECUTE (http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_parallel_ex.htm#ARPLS67330) package which is another option.

  • Help with IMMEDIATE EXECUTION

    Hello people can help you Execute Immediate below set out? I'm a little confused on how to use it.

    #!/bin/sh
    
    sqlplus -s ${DB_USER} << EOF
    
    
    SELECT 'ALTER TABLE PANDORA.'||table_name||' DROP PARTITION '||partition_name||';'
    FROM user_tab_partitions
    WHERE TABLE_NAME IN ('SIU', 'NGME')
    AND partition_name = (SELECT MIN(partition_name) 
                          FROM user_tab_partitions
                          WHERE TABLE_NAME IN ('NGME')
                          AND partition_name <> 'DUMMY'
                          );
                                      
    SELECT 'ALTER TABLE PANDORA.'||table_name||' ADD PARTITION WEEK'||TO_CHAR(TO_NUMBER(REPLACE(partition_name,'WEEK'))+1)||';'
    FROM user_tab_partitions
    WHERE TABLE_NAME IN ('SIU', 'NGME')
    AND partition_name = (SELECT MAX(partition_name) 
                          FROM user_tab_partitions
                          WHERE TABLE_NAME IN ('NGME')
                          AND partition_name <> 'DUMMY'
                          );
       
    SELECT 'ALTER INDEX PANDORA.IDX_SERVED_IMSI MODIFY PARTITION '||partition_name||' UNUSABLE;'
    FROM user_tab_partitions
    WHERE TABLE_NAME = 'SIU'
    AND partition_name = (SELECT MAX(partition_name) 
                          FROM user_tab_partitions
                          WHERE TABLE_NAME IN ('NGME')
                          AND partition_name <> 'DUMMY'
                          );
    
    EXIT
    EOF 
    

    Thank you in advance.

    Something like

    BEGIN

    I'm IN)

    SELECT table_name, nom_partition

    Of user_tab_partitions

    WHERE TABLE_NAME IN ("SIU", "NGME")

    AND nom_partition = (SELECT MIN (partition_name)

    Of user_tab_partitions

    WHERE TABLE_NAME IN ("NGME")

    AND nom_partition <> 'DUMMY '.

    )

    ) LOOP

    RUN IMMEDIATELY "ALTER TABLE PANDORA." | i.table_name |' DROP PARTITION '. i.PARTITION_NAME;

    END OF LOOP:

    END;

    NOT TESTED.

  • immediate execution

    Hello, I'm on 11.2.0.4, and I'm trying to write a procedure with parameter that runs immediately a DDL.

    How can I write this while I'm on the parameter which will always be 0?

    SYS@db1 AS SYSDBA > create or replace procedure set_rm_tws (o_status NUMBER)

    as

    Start

    o_status: = 0;

    run immediately ' alter system set resource_manager_plan = "DEFAULT_PLAN" scope = "both"' using o_status;

    end;

    /

    Created procedure.

    SYS@db1 AS SYSDBA > var o_status number

    SYS@db1 AS SYSDBA > exec set_rm_tws(:o_status);

    BEGIN set_rm_tws(:o_status); END;

    *

    ERROR on line 1:

    ORA-00922: missing or not valid option

    ORA-06512: at "SYS." SET_RM_TWS', line 5

    ORA-06512: at line 1

    Hello Vili Dialis

    You will get all the information of the execution. What you get is simple no and not an exception.

    create or replace procedure set_rm_tws (o_status NUMBER)

    as

    Start

    o_status: = 0;

    run immediately ' alter system set resource_manager_plan = "DEFAULT_PLAN" scope = "both"' using o_status;

    EXCEPTION, THEN THAN OTHERS

    THEN o_status: = 1;

    END;

    /

    If you have a problem with running so that you can get the 1 in the variable o_status.

    The help of the o_status should be deleted.

    I hope it helps.

    Best regards, David

  • Function in pipeline with immediate execution

    Hello Experts,

    I created a tube lined function to run immediately, cause of sub condition;
    (1) columns where clause dynamically.
    (2) I want to know the data stored in above the dynamic columns.
    (3) I want to use in the report, so I don't want to insert it into a table.

    I have created a TYPE, then thanks to run immediately, I got the query and the result of this query will be stored in the TYPE.
    But when you call the function I get
    ORA-00932: inconsistent data types: expected - was -.

    Below is my function and type, let me know I am wrong and it is my correct logic.
    CREATE OR REPLACE TYPE OBJ_FPD AS OBJECT
                      (LOW_PLAN_NO VARCHAR2 (40),
                       FPD VARCHAR2 (5),
                       SERIAL_NO NUMBER,
                       CEDIA_CODE VARCHAR2 (2),
                       DT DATE);
    ----                                      
    CREATE OR REPLACE TYPE FPD_TBL_TYPE AS TABLE OF OBJ_FPD;
    ----
    CREATE OR REPLACE FUNCTION FUNC_GET_FPD_DATE (P_LOW_PLAN_NO    VARCHAR2,
                                                  P_CEDIA_CODE     VARCHAR2,
                                                  P_SERIAL_NO      NUMBER)
       RETURN FPD_TBL_TYPE
       PIPELINED
    AS
       CURSOR C1
       IS
              SELECT 'FPD' || LEVEL TBL_COL
                FROM DUAL
          CONNECT BY LEVEL <= 31;
    
       V_STR        VARCHAR2 (5000);
    
       V_TBL_TYPE   FPD_TBL_TYPE;
    BEGIN
       FOR X IN C1
       LOOP
          V_STR :=
                'SELECT A.low_PLAN_NO,
               A.FPD,
               A.SERIAL_NO,
               A.cedia_code,
               TO_DATE (
                     SUBSTR (FPD, 4, 5)
                  || ''/''
                  || TO_CHAR (C.low_PLAN_PERIOD_FROM, ''MM'')
                  || ''/''
                  || TO_CHAR (C.low_PLAN_PERIOD_FROM, ''RRRR''),
                  ''DD/MM/RRRR'')
                  DT FROM ( SELECT low_PLAN_NO, '
             || ''''
             || X.TBL_COL
             || ''''
             || ' FPD, '
             || X.TBL_COL
             || ' SPTS, SERIAL_NO, cedia_code FROM M_low_PLAN_DETAILS WHERE NVL('
             || X.TBL_COL
             || ',0) > 0 AND SERIAL_NO = '
             || P_SERIAL_NO
             || ' AND cedia_code = '
             || ''''
             || P_CEDIA_CODE
             || ''''
             || ' AND low_PLAN_NO = '
             || ''''
             || P_LOW_PLAN_NO
             || ''''
             || ') A,
               M_low_PLAN_DETAILS B,
               M_low_PLAN_MSTR C
         WHERE     A.low_PLAN_NO = B.low_PLAN_NO
               AND A.cedia_code = B.cedia_code
               AND A.SERIAL_NO = B.SERIAL_NO
               AND B.low_PLAN_NO = C.low_PLAN_NO
               AND B.CLIENT_CODE = C.CLIENT_CODE
               AND B.VARIANT_CODE = C.VARIANT_CODE
    CONNECT BY LEVEL <= SPTS';
    
          EXECUTE IMMEDIATE V_STR INTO V_TBL_TYPE;
    
          FOR I IN 1 .. V_TBL_TYPE.COUNT
          LOOP
             PIPE ROW (OBJ_FPD (V_TBL_TYPE (I).LOW_PLAN_NO,
                                V_TBL_TYPE (I).FPD,
                                V_TBL_TYPE (I).SERIAL_NO,
                                V_TBL_TYPE (I).CEDIA_CODE,
                                V_TBL_TYPE (I).DT));
          END LOOP;
       END LOOP;
    
       RETURN;
    EXCEPTION
       WHEN OTHERS
       THEN
          RAISE_APPLICATION_ERROR (-20000, SQLCODE || ' ' || SQLERRM);
          RAISE;
    END;
    Waiting for your point of view.

    Kind regards

    ORA Ash wrote:
    This result is coming as FPD4 has 2 as a value, then there will be two records to the result with column date (DT).
    Your query is perfect only thing is that I have to go to connect the name of the column immediately above as below;

    AND FPD = 'FPD14'
    CONNECT BY LEVEL <= SPTS;
    

    So, if possible, please let me know is there a better way to spend the column name, to get the correct data.

    Well, we don't have any example for working with information and the expected results of these data in the example, then it is very difficult for us to understand exactly what is affected by the query.

    What happens if you delete the connection by clause? Why must you connect him by clause in your query? It is not clear what you include that for (like I said).

  • Immediate execution, to update and bind Variables

    I can't EXECUTE IMMEDIATE to work with an update statement when trying to link the name of the table. Consider the following example:
    create table gr_test(
      n Number);
      
    insert into gr_test (n) values(1);
    The anonymous block under works:
    declare
      update_statement Varchar2(2000);
    begin
      update_statement := '
      update gr_test
         set n = 2';
    
      execute immediate update_statement;
    end;
    but not
    declare
      update_statement Varchar2(2000);
    begin
      update_statement := '
      update :table_name
         set n = 2';
         
      execute immediate update_statement
        using 'gr_test';
    end;
    It gives ORA-00903 - invalid table name.

    You can not link the names of tables/columns using the clause Bind Variables (USING).

    You need to add to the dynamic SQL.

    Something this way:

     declare
       update_statement Varchar2(2000);
       v_table_name        varchar2(30);
     begin
       v_table_name = 'GR_TEST';
       update_statement := '
       update ' || v_table_name || '
          set n = 2';
    
       execute immediate update_statement;
     end;
     
    

    For more information about the Execute Immediate, please read execute immediate statement.
    For Dynamics, reading SQL statements dynamic SQL Oracle 11 g.

Maybe you are looking for

  • WiFi does not work after resrtating wifi modem

    Hi HPI 4540 probook s basic model.i have a big problem:When the electricity goes on and on, computer laptop mi can't find WiFi modem.I have change my asus modem, D-link, TP-link 3 times.I have this problem and I re - install wireless driver.I have re

  • WTF 70 d matching Windows 8.1 - crashes

    Hello I tried to pair my 70 d to a desktop Windows 8.1. However the cameras LCD screen sticks to current coupling. I have disabled the firewall (just in case) Got the latest version of the software. Because the computer can see the camera is located

  • Dropbox and Windows 7 - the 'My Documents' folder location

    Is there a risk of changing the location of the "My Documents" folder either in Dropbox, so that all files are synchronized automatically?  This would avoid having to always drag files and remember what has been dragged and implemented to date. Dropb

  • Windows Movie Maker - Audio only, which plays in the exported project

    Hello. I did a project in windows movie maker with video and audio files. Project perfect cheek (the two audio/video playback) in windows movie maker when I am in the phase "creation/editing. When I export it and save the project as a. MP4 or. WMV fi

  • Help! Export 5.1 surround quicktime

    Luddite needing help!I need to export a quicktime from Apple ProRes 422 with 5.1 audio to a sequence that I created and I don't know how. I'm not technically savvy, so if I have of his ignorance, I am! But I know not how to follow the step by step in