EXECUTE IMMEDIATE and operator "AND".

Please what is the problem with this because the error said Invalid operator relationship
declare
x varchar2 (20);

Start
x: = "Navy";
address: = "Cairo";
ID: = 4;

EXECUTE IMMEDIATE 'update t1 set name =' | x |' where address: = v1 and id: v2 =' help to answer, id;

end;


but it works fine without operator AND
declare
x varchar2 (20);

Start
x: = "Navy";
address: = "Cairo";
ID: = 4;

EXECUTE IMMEDIATE 'update t1 set name =' | x: ' if the address: v1 =' using address;

end;

EXECUTE IMMEDIATE 'update t1 set name =' | x |' where address =: id = and v1: v2' using answer, id;

-There should not be ': =' must be '=' and ': should precede the variable equal not before.

Tags: Database

Similar Questions

  • EXECUTE IMMEDIATE and NO_DATA_FOUND

    Hi all
    in my proc, I need to create a block for the select statement to continue with the process flow, because when the select returns no value I get the error ORA-01403: no data found.

    BEGIN
    Start
    query_stmt: = ' select CUST_FIRST_NAME in the OEHR_CUSTOMERS where ACCOUNT_MGR_ID =: 1';
    EXECUTE IMMEDIATE query_stmt in l_value using PK;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    audit_exception (SQLCODE, SUBSTR (SQLERRM, 1, 128), SYSTIMESTAMP);
    l_value: = null;
    end;
    query_stmt: = ' delete from OEHR_CUSTOMERS where ACCOUNT_MGR_ID =: 1';
    EXECUTE IMMEDIATE query_stmt using PK;
    query_stmt: = ' delete from OEHR_EMPLOYEES where MANAGER_ID =: 1';
    EXECUTE IMMEDIATE query_stmt using PK;
    query_stmt: = ' delete from OEHR_EMPLOYEES where EMPLOYEE_ID =: 1';
    EXECUTE IMMEDIATE query_stmt using PK;
    EXCEPTION
    WHILE OTHERS THEN
    audit_exception (SQLCODE, SUBSTR (SQLERRM, 1, 128), SYSTIMESTAMP);
    LIFT;


    Is there another solution to continue with the flow of treatment using dynamic SQL and select the statement without the block, because this way, I have to change a lot of code.

    Thank you
    Sergio

    JoL says:
    I used dynamic sql code with bind variable because I red this combination to improve performance (SQL is DB riutilizable) and for reasons of safety (protection against SQL Injection attacks).

    Sergio

    OK, bind variable improve performance and prevent SQL injections, however just refers to the difference between... for example

    immediately execute "delete from table1 where col1 = ' |" col1_value;

    and

    immediately execute "delete from table1 where col1 =: 1' using col1_value;"

    However,.

    When you write a DML directly in PL/SQL statement, then what is a local variable (not inside the SQL tables themselves) e.g. PK in your code is linked automatically as a variable binding by the PL/SQL engine, if of course they are bind variables and do not impinge on the performance. If you run a DML statement directly within PL/SQL like this and then check it running (assuming you've been pretty fast) via Enterprise Manager, you would see one of the places where you specified a local variable: 1: 2, etc.

    ;)

  • Execute Immediate and by calling a function

    I'm calling a function by using the Execute Immediate, but not sure what the correct syntax for the function's return value after the Execute Immediate runs.

    I need the value for further processing in my PL/SQL package.

    I tried several methods, but cannot get the right format for this work/compilation.


    EExecute Immediate plsql_block back in ShName2;

    Have been that plsql_block has the code to:
    Declare shname2 varchar2 (4000); Begin shname2: = lurking. ShortNm ('STRUCTURE'); End;
    SQL> set serveroutput on
    SQL>
    SQL> create or replace
      2  function fun
      3     return varchar2
      4  is
      5  begin
      6     return 'hello';
      7  end fun;
      8  /
    
    Function created.
    
    SQL>
    SQL>
    SQL> declare
      2     var varchar2(100);
      3  begin
      4     execute immediate 'begin :this := fun; end;' using in out var;
      5    dbms_output.put_line(var);
      6  end;
      7  /
    hello
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    
  • EXECUTE IMMEDIATE and multiple SQL

    Hello
    I get a string, say strSQL from an application.
    for example:

    strSQL: = "CREATE UNIQUE INDEX 'WEBDBTARGET'". "" PK_EMPID6"ON"WEBDBTARGET ". "" EMP_R1 "("EMPID")
    PCTFREE, INITRANS 10 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645)
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 DEFAULT USER_TABLES)
    TABLESPACE "TARGET_TS_01";

    CREATING INDEX 'WEBDBTARGET '. "' MARK ' ON 'WEBDBTARGET '. "" EMP_R1 "("EMPNAME")
    PCTFREE, INITRANS 10 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645)
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 DEFAULT USER_TABLES)
    TABLESPACE «TARGET_TS_01 "«;»

    I tried to run the strSQL using EXECUTE IMMEDIATE

    get the error
    * "PLS-00103: encountered the symbol"end-of-file"when it is waiting for one of the following values: *"
    *; < an ID > < a between double quote delimited identifiers of > *.
    * The symbol ";" was replaced by "end-of-file" continue. » *

    I understand that the question is after the first SQL.
    How to use EXECUTE IMMEDIATE if the input string contains multiple SQL?
    Help, please.

    TIA,
    Newbie

    user570138 wrote:
    strSQL: = "CREATE UNIQUE INDEX 'WEBDBTARGET'". "" PK_EMPID6"ON"WEBDBTARGET ". "" EMP_R1 "("EMPID")
    PCTFREE, INITRANS 10 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645)
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 DEFAULT USER_TABLES)
    TABLESPACE "TARGET_TS_01";

    CREATING INDEX 'WEBDBTARGET '. "' MARK ' ON 'WEBDBTARGET '. "" EMP_R1 "("EMPNAME")
    PCTFREE, INITRANS 10 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645)
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 DEFAULT USER_TABLES)
    TABLESPACE 'TARGET_TS_01"';'

    You have extra quote (marked in red). But remove won't solve all of your problems. EXECUTE IMMEDIATE executes a SQL statement. You must divide in two strSQL:

    strSQL:=' CREATE UNIQUE INDEX "WEBDBTARGET"."PK_EMPID6" ON "WEBDBTARGET"."EMP_R1" ("EMPID")
    PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    TABLESPACE "TARGET_TS_01"';
    EXECUTE IMMEDIATE strSQL;
    CREATE INDEX "WEBDBTARGET"."SDSDSD" ON "WEBDBTARGET"."EMP_R1" ("EMPNAME")
    PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    TABLESPACE "TARGET_TS_01"';
    EXECUTE IMMEDIATE strSQL;
    

    SY.
    P.S. in the majority of cases it IT not a good design of database to create objects dynamically.

  • How to set multiple parameters in a sql EXECUTE IMMEDIATE

    I want to set nls_language and nls_date_language and set them as different languages. fnd_global.set_nls_context () does not work. So I think I can use the EXECUTE IMMEDIATE and add them together into a single statement. But I don't know how to make that happen. Can someone help me? Thank you very much.

    PS: It must be done in a single call.

    928091 wrote:
    Hey, thanks for your reply, I forgot to mention that it should be in the begin-end block, do you know how?

    EXEC is a more SQL API which can be used to execute the PL/SQL code. What it does is put the PL/SQL code in a BEGIN block... END of block and run.

    So, you can also manually put code in a BEGIN block... END of block and run like that.

    SQL> begin
      2     execute immediate q'[begin execute immediate 'alter session set nls_date_language = ''AMERICAN'''; execute immediate 'alter session set nls_language = ''AMERICAN'''; end;]';
      3  end;
      4  /
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    

    And I don't understand what possible benefit he made a single run in a BEGIN block... Terminate during execution of multiples.

    Why this code is not in your interest, something like this

    begin
         execute immediate 'alter session set nls_date_language = ''AMERICAN''';
         execute immediate 'alter session set nls_language = ''AMERICAN''';
    end;
    /
    
  • EXECUTE IMMEDIATE or DBMS_UTILITY. EXEC_DDL_STATEMENT

    Hello

    I recently became aware of DBMS_UTILITY. EXEC_DDL_STATEMENT and I was wondering if it works in pretty much the same way as EXECUTE IMMEDIATE. I'm guessing that EXECUtE IMMEDIATE offers more flexibility when putting together the command you want to run, but you are the only real difference? All opinions accepted with gratitude,

    Kind regards

    Kevin.

    This isn't an exact answer to your question, but it may be useful.

    Execute Immediate is the approach privileged 9i or higher. If you decide which to use, go with EXECUTE IMMEDIATE. You never know when the other dynamic SQL methods will be deprecated. In addition, EXECUTE IMMEDIATE has also been optimized (and will continue to be optimized), so you can usually expect better performance during use.

    The exact differences between EXECUTE IMMEDIATE and DBMS_UTILITY. EXEC_DDL_STATEMENT go, I can't give you an exact answer. (Also the fact that DBMS_UTILITY. EXEC_DDL_STATEMENT DDL is, of course).

    You may or may not find this article helpful: http://okjsp.pe.kr/seq/9789. He did a good job to compare the differences between EXECUTE IMMEDIATE and another way inherited to the dynamic SQL statements (DBMS_SQL. RUN)

    Bob

  • Execute Immediate with DOF and TABLE() - error ORA-22905

    Hello

    I have a problem trying to use a user defined the Type of the Table in a statement Execute Immediate containing a CREATE TABLE statement.

    Is there no work around for this problem?

    The actual code for the SELECT * OF TABLE(:T) is dynamic and slow. That's why I try to avoid to create/fill the table in two steps (as does with MY_TABLE1). Also, in this case, I can't use SELECT * but must specify all the columns (amount variable and over 100 columns).

    CREATE TYPE MY_TABLE_TYPE AS TABLE OF VARCHAR2(30);
    /
    DECLARE
        MT MY_TABLE_TYPE;
    BEGIN
        SELECT * BULK COLLECT INTO MT FROM DUAL;
        -- Two steps
        EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE1 (A VARCHAR2(30))';
        EXECUTE IMMEDIATE 'INSERT INTO  MY_TABLE1    SELECT * FROM TABLE(:T)' USING MT; -- OK
        -- One step
        EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE2 AS SELECT * FROM TABLE(:T)' USING MT; -- ERROR ORA-22905   
    END;
    /
    

    byee

    Andrea

    In my view, the error message is incorrect or the less misleading. Bind variables cannot be used in DDL:

    SQL > declare
    2 number of v_var: = 99;
    3. start
    4 run immediately "' create the my_table2 in select table: double T" using v_var; "
    5 end;
    6.
    declare
    *
    ERROR on line 1:
    ORA-01027: bind variable not allowed for data definition operations
    ORA-06512: at line 4 level

    SQL >

    What you could do is use the package variable:

    SQL > CREATE OR REPLACE
    2 PACKAGE PKG1
    3 EAST
    4 MT MY_TABLE_TYPE;
    5 FUNCTION GET_MT
    6 RETURN MY_TABLE_TYPE;
    7 END;
    8.

    Package created.

    SQL > CREATE OR REPLACE
    PACKAGE 2 BODY PKG1
    3 EAST
    4 GET_MT FUNCTION
    5 RETURN MY_TABLE_TYPE
    6 EAST
    7. START
    8 RETURN MT;
    9 END;
    10 END;
    11.

    Package body created.

    SQL > DROP TABLE MY_TABLE1 PURGE
    2.

    Deleted table.

    SQL > DROP TABLE MY_TABLE2 PURGE
    2.
    DROP TABLE MY_TABLE2 PURGE
    *
    ERROR on line 1:
    ORA-00942: table or view does not exist

    SQL > START
    2. SELECT * BULK COLLECT INTO PKG1.MT FROM DUAL;
    3 - two steps
    4 RUN IMMEDIATELY "CREATE TABLE MY_TABLE1 (A VARCHAR2 (30))';"
    5 IMMEDIATELY EXECUTE "INSERT INTO MY_TABLE1 SELECT * FROM TABLE (PKG1." GET_MT)';
    6 - one step
    7 IMMEDIATE EXECUTION "CREATE TABLE MY_TABLE2 AS SELECT * FROM TABLE (PKG1." GET_MT)';
    8 END;
    9.

    PL/SQL procedure successfully completed.

    SQL > select * from my_table1;

    A
    ------------------------------
    X

    SQL > select * from my_table2;

    COLUMN_VALUE
    ------------------------------
    X

    SQL >

    SY.

  • How to create and insert data with Execute Immediate?

    Hi guys

    Am stuck on a procedure of formatting in a package... script works okay however integrating a module turns out to be difficult!

    Am not used to oracle... I have the script runs, but not in the package... Well not all that... Drop Table worked

    CREATE or REPLACE PACKAGE BODY is

    PROCEDURE DropTable1 IS

    BEGIN

    run immediately ("DROP TABLE mytable1");

    END;

    PROCEDURE PopulateTable1 IS

    BEGIN

    immediately execute ('CREATE TABLE mytable1 )

    AS LONG AS)

    Select

    substr (T1.genarea, 3, 3) as M_Class,

    substr (T1.genarea, 6, 30) as M_Description,

    substr (T1.genarea, 36, 3) as M_Class,

    substr (T1.genarea, 39, 30) as M_Description,

    substr (T1. ItemItem, 1, 3) as product_code,.

    T3. CHANNEL_NUM as SALES_CHANNEL,

    to_date(''t2.time_id'',''dd-mon-yyyy'') as mis_date,

    Sum (T2.ap_cw_cfi_irp + T2.ap_cw_issues_irp) as ap_gross,

    sum (t2. Ap_Cw_Cfi_Irp + t2. Ap_Revivals_Irp) as ap_net,

    Sum (T2.sp_inc_irp + T2.sp_issues_irp) as sp_gross,

    Sum (T2.sp_dec_irp + T2.sp_fs_irp) as sp_net

    Of

    d_pr t1, t2 age_map t3 law

    where

    T1.pfx = "WE"and t1.coy ="1" and t1.tabl = "T81" and substr (t1.itemitem, 1, 3) = t2.product_id and t3. AGE_NUM = t2.age_id

    Group

    substr (T1.genarea, 3, 3),

    substr (T1.genarea, 6, 30),

    substr (T1.genarea, 36, 3),

    substr (T1.genarea, 39, 30),

    substr (T1. ItemItem, 1, 3).

    T3. CHANNEL_NUM,

    to_date(''t2.time_id'',''dd-mon-yyyy'')

    )');

    COMMIT;

    END PopulateTable1;

    END test;

    /

    Thank you

    Hello

    a few notes.

    1. to_date(t2.time_id,'dd-mon-yyyy')

    New York T2.Time_ID Cis the varchar2 data type that contains values to JJ-me-YYYY format?

    And if, in which language is used for the names of the months? Conversions are point impossible to solve in reasonable time limits without logging of dml errors and unique failure on charges of staging nightly!


    2 single quote escaping "alternative in string literals.

    You can use Q or q to escape single quotes in strings.

    http://docs.Oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF00218

    3. validation

    Not required because the DDL commands commit implied.

    In general I recommend you write commit clauses only in calling script rather than in the code unless it connects with an autonomous transaction.

    You end up with a lot of validation of code here and there and you don't know where it is and where it isn't. That is, your process may have more than one appeal process and commit the middle of the process, it is not atomic processes.

    Here's the demo although I recommend also using the static table and truncate to efficiency. ETG is good choice for the purpose of maintenance table.

    create or replace
    package testing is
      procedure staging_one;
    end;
    /
    create or replace
    package body testing is
      --
      procedure staging_one is
        --
        procedure drop_staging_one is
          table_does_not_exist exception;
          pragma exception_init(table_does_not_exist, -00942);
        begin
          execute immediate q'{
            drop table staging_one purge
          }';
        exception when table_does_not_exist then
          return; -- fine
        end;
        --
        procedure create_staging_one is
        begin
          execute immediate q'{
    
            -- remove >>>
            create table staging_one nologging
            as
            select * from dual
            -- <<< remove
    
            /* uncomment >>>
            create table staging_one nologging
            as
            select
              substr(t1.genarea,3,3)                    as m_class,
              substr(t1.genarea,6,30)                   as m_description,
              substr(t1.genarea,36,3)                   as m_class,
              substr(t1.genarea,39,30)                  as m_description,
              substr(t1.itemitem,1,3)                   as product_code,
              t3.channel_num                            as sales_channel,
              to_date(t2.time_id,'dd-mon-yyyy')         as mis_date,
              sum(t2.ap_cw_cfi_irp+t2.ap_cw_issues_irp) as ap_gross,
              sum(t2.ap_cw_cfi_irp+t2.ap_revivals_irp)  as ap_net,
              sum(t2.sp_inc_irp   +t2.sp_issues_irp)    as sp_gross,
              sum(t2.sp_dec_irp   +t2.sp_fs_irp)        as sp_net
            from
              d_pr t1,
              act t2,
              age_map t3
            where
              t1.pfx                      = 'IT'
              and t1.coy                  = '1'
              and t1.tabl                 = 'T81'
              and substr(t1.itemitem,1,3) = t2.product_id
              and t3.age_num              = t2.age_id
            group by
              substr(t1.genarea,3,3),
              substr(t1.genarea,6,30),
              substr(t1.genarea,36,3),
              substr(t1.genarea,39,30),
              substr(t1.itemitem,1,3),
              t3.channel_num,
              to_date(t2.time_id,'dd-mon-yyyy')
            <<< uncomment */
          }';
          --
        end;
      -- main
      begin
        drop_staging_one;
        create_staging_one;
      end;
    end;
    /
    
    set serveroutput on
    
    exec testing.staging_one;
    
    select * from staging_one
    ;
    commit
    ;
    
    PACKAGE TESTING compiled
    PACKAGE BODY TESTING compiled
    anonymous block completed
    DUMMY
    -----
    X 
    
    committed.
    
  • Y at - it an easy way to have a version number that the code VI has access to, and which is used as the version number for the executable file and the installer builds?

    Y at - it an easy way to have a version number that the code VI has access to, and which is used as the version number for the executable file and the installer builds? Now whenever I update my software I need to change the global variable where I store the version number, and then when I build I have in hand, open the properties and change the version number for the executable file and the installer. Is there an easy way to make these as all corresponding automatically?

    Have you tried a search? This question comes up a LOT. Here are the results of a search: http://forums.ni.com/t5/forums/searchpage/tab/message?location=Node%3A170&q=application+version#mess...

  • help with immediate and negative performance

    I'm doing a loop with a select with less. The problem is that I need to add a table table_name in a variable in my final table. I'm trying with these codes, but it gives me invalid identifier. Is posible to put right the tablename to insert it into my final table?

    Thank you

    DECLARE

    VARCHAR2 (4000) of the sentence;

    BEGIN

    FOR I IN (SELECT A.TABLE_NAME AS TABLENAME, ALL_TABLES DBLINK AS B.DBLINK A, JBI_DM_CONEXION_DBLINK B WHERE A.TABLE_NAME = B.TABLE_COMPARE) LOOP

    sentence: = "INSERT INTO select FINAL_TABLE, COLUMNA, OWNER, SYSDATE, TABLA" | I.TableName: ' a ' | i.TABLENAME | "less select table_name, column_name, owner, SYSDATE, ' | I.TableName |' of ALL_TAB_COLUMNS@'|| i.DBLINK | ";

    DBMS_OUTPUT. Put_line (Award);

    execute immediate condemnation;

    commit;

    END LOOP;

    END;

    /

    you will need to escape the sign of the quotation in your chain - something like:

    DECLARE

    VARCHAR2 (4000) of the sentence;

    BEGIN

    I'm IN (SELECT A.TABLE_NAME AS TABLENAME FROM ALL_TABLES where rownum< 2="" )="">

    sentence: =' INSERT INTO select FINAL_TABLE, OWNER, COLUMNA, SYSDATE, TABLA "' | I.TableName | " 'from' | i.TABLENAME;

    DBMS_OUTPUT. Put_line (Award);

    commit;

    END LOOP;

    END;

    /

  • use of execute immediate with variables

    Hello

    I want to update a table with immediate execution, but I need to use the variable to run immediately. I typed a code, but the code below does not work and I m getting the error ORA-00936. Something wrong with this code?

    WHILE v_acu_payment_amount > 0

    LOOP

    BEGIN

    SELECT emplid, amount_past_due

    IN v_emplid, v_vade_tutari

    OF vade_temp

    WHERE the sira = v_sirano AND emplid IN (r1.emplid);

    END;

    v_acu_payment_amount: = v_acu_payment_amount - v_vade_tutari;

    Dbms_output.put_line ('paymentamount2' | v_acu_payment_amount);

    IF v_acu_payment_amount > 0

    THEN

    EXECUTE IMMEDIATE "update vade_temp set AMOUNT_PAST_DUE = to_number('||) 0

    || ') where sira = to_number (')

    || v_sirano

    || ')';

    ON THE OTHER

    Temp: = v_acu_payment_amount * (-1);

    Dbms_output.put_line (temp);

    EXECUTE IMMEDIATE "update vade_temp set AMOUNT_PAST_DUE = to_number (')"

    || Temp

    || ') where sira = to_number (')

    || v_sirano

    || ')';

    END IF;

    COMMIT;

    v_sirano: = v_sirano + 1;

    END LOOP;

    Kind regards

    Gunce

    In addition, you have no dynamic SQL for this

    [code]

    WHILE v_acu_payment_amount > 0

    LOOP

    BEGIN

    SELECT emplid, amount_past_due

    IN v_emplid, v_vade_tutari

    OF vade_temp

    WHERE the sira = v_sirano AND emplid IN (r1.emplid);

    END;

    v_acu_payment_amount: = v_acu_payment_amount - v_vade_tutari;

    Dbms_output.put_line ('paymentamount2' | v_acu_payment_amount);

    IF v_acu_payment_amount > 0

    THEN

    UPDATE vade_temp

    SET amount_past_due = 0

    WHERE the sira = v_sirano;

    ON THE OTHER

    Temp: = v_acu_payment_amount * (-1);

    Dbms_output.put_line (temp);

    UPDATE vade_temp

    SET AMOUNT_PAST_DUE = temp

    where sira = v_sirano;

    END IF;

    COMMIT;

    v_sirano: = v_sirano + 1;

    END LOOP;

    [/ code]

    But if you need dynamic sql statements, then you should use bind variables as

    ...

    EXECUTE IMMEDIATE "UPDATE vade_temp SET amount_past_due =: b1 WHERE sira =: b2' using 0, v_sirano;"

    ...

    HTH

  • Maximum size of EXECUTE IMMEDIATE

    Hellou everyone,

    I would like to ask if there is a way how to run the dynamic SQL CREATE or VIEW of REPLACE command more than 32 KB of wholesale. Because the EXECUTE IMMEDIATE statement can run up to 32 k (greater length of variable plsql chain) chain

    Is there a way how children Ridge or replace the command?

    Or I need to revrite using DBMS_SQL.

    Thank you.

    (a) WHY? If you want to dynamically create views?  This is not recommended because your application/database should be designed at the time of the design, not running.

    (b) If you are on 11 g, you can use the CLOB datatype with immediate execution, so there is no 32 K limit.

    (c) If you are before 11 g you need to update, but if you can't then the following example is how you do it using DBMS_SQL.

    SQL > declare

    2 v_large_sql clob.

    3 v_num number: = 0;

    number of v_upperbound 4;

    5 v_sql dbms_sql.varchar2s;

    6 whole v_cur;

    number of v_ret 7;

    8 v_join_sql varchar2 (100): = ' crΘer view vw_tmp as ";

    9 start

    10. build a very big SQL statement in the CLOB

    11 loop

    12 v_large_sql: = v_large_sql | v_join_sql | "select" the number of this line is: ' | TO_CHAR (v_num, 'fm0999999') | " "as col1 from dual;"

    13 v_join_sql: = "union all";

    14 v_num: = v_num + 1;

    15 exit when dbms_lob.getlength (v_large_sql) > 40000 or v_num > 800;

    16 end loop;

    17 dbms_output.put_line (' length :'||) DBMS_LOB. GetLength (v_large_sql));

    18 dbms_output.put_line ('Num :'|| v_num);

    19-

    20. now divide this big SQL statement into pieces of 256 characters and put in table VARCHAR2S

    21 v_upperbound: = ceil ((v_large_sql) dbms_lob.getlength / 256);

    22 because me at 1.v_upperbound

    23 loop

    24 v_sql (i): = dbms_lob.substr (v_large_sql

    25, 256 - amount

    26, ((i-1) * 256) + 1 - offset

    27                                 );

    28 end of loop;

    29-

    30. now analyze and execute the SQL statement

    31 v_cur: = dbms_sql.open_cursor;

    32 dbms_sql.parse (v_cur, v_sql, 1, v_upperbound, dbms_sql.native, false);

    33 v_ret: = dbms_sql.execute (v_cur);

    34 dbms_output.put_line ("' view created");

    35 dbms_sql.close_cursor (v_cur);

    36 end;

    37.

    Length: 40015

    NUM:548

    View created

    PL/SQL procedure successfully completed.

    SQL > select count (*) in the vw_tmp;

    COUNT (*)

    ----------

    548

    SQL > select * from vw_tmp where rownum<=>

    COL1

    -----------------------------------

    The number of this line is: 0000000

    The number of this line is: 0000001

    The number of this line is: 0000002

    The number of this line is: 0000003

    The number of this line is: 0000004

    The number of this line is: 0000005

    The number of this line is: 0000006

    The number of this line is: 0000007

    The number of this line is: 0000008

    The number of this line is: 0000009

    10 selected lines.

    SQL >

  • Create a temporary table using EXECUTE IMMEDIATE

    Hello

    I need to create a report more complex which must have three different queries. I use a determined IF clause that the query that uses the report, according to the parameters.

    I want to write the output to a csv file, so I created a PROCEDURE.

    The first package of the procedure has the three SQL and the IF clause in order to determine the query that the report uses and stores the query code in a variable (v_sql), which is passed to the PROCEDURE that needs to write to the output of the report.

    I tried to create a table with data from the request in order to make a LOOP and exit, something like this:

    WRITE_FILE (errBUFF of the PROCEDUREOUT VARCHAR2,
    retCODEOUT VARCHAR2,
    v_sqlIN VARCHAR2)

    IS

    ContorNUMBER;

    BEGIN

    EXECUTE IMMEDIATE v_sql;
    SLIDE G
    IS
    Select * from XXROR_REG_MF_TBL;
    --
    -initialization
    --
    retCode: = 0;
    errBUFF: = NULL;
    Contor: = 0;
    --
    -cursor
    --

    FOR X IN G
    LOOP
    APPS. FND_FILE.
    PUT_LINE)
    APPS. FND_FILE. OUTPUT,
    ....)

    I should mention that v_sql is something like:

    CREATE GLOBAL TEMPORARY TABLE ACEs (SELECT * of the double);

    I can't really do that, so I was wondering if you have any suggestions

    Thank you

    Claudiu

    Hello

    I don't think you need a table at all. You can set the cursor based on the SQL passed as parameter

    https://docs.Oracle.com/database/121/LNPLS/dynamic.htm#LNPLS629

    Concerning

    Marcus

  • Dynamic Query(execute immediate)

    Greetings,

    VERSION:-10 g

    Name of the table column is the name of the month which I store in a condition variable that I have to pass the names of columns at runtime of the value

    TABLE DEALER_MAST

    NUMBER OF DEALER_DIM_ID
    NUMBER OF APR
    MAY ISSUE
    JUNE ISSUE
    NUMBER OF JUL
    AUGUST ISSUE
    NUMBER OF MS


    I now have the code example below in my procedure


    v_dealer VARCHAR2 (3);
    XYZ varchar2 (2000);

    SELECT TO_CHAR (SYSDATE, 'MY') IN THE DOUBLE V_DEALER;


    DECLARE CURSOR a1 IS SELECT DEALER_ID FROM DEALER_MAST;

    BEGIN

    FOR j IN a1
    loop

    COUNT (*) SELECT IN DEALER_COMM FROM subs_fact
    WHERE TO_CHAR (ACTIVATION_DATE, 'Mon - yy') = (select to_char (add_MONTHS(sysdate,-2), 'mon-yy') FROM dual)
    - AND TAB_ELEG = 1
    and DEALER_ID = j.DEALER_ID;


    -Dynamicaly passing the name of column

    XYZ: = 'SELECT'. V_DEALER | "IN DEALER_MAST FROM DEALER_MAST WHERE DEALER_DIM_ID =' | j.DEALER_DIM_ID;

    run immediately (XYZ);

    /*

    AFTER immediate execution of the query should be as
    SEVEN ELECTED IN DEALER_MAST FROM DEALER_MAST WHERE DEALER_DIM_ID = 24345

    But not to store the data in the variable & gives error like key word missing on run immediately (XYZ);

    */

    If (DEALER_MAST > 2) can
    ---
    --
    end if;

    ERROR:-do not store data in the variable & gives error like key word missing on run immediately (XYZ);

    Thanks in advance

    Maybe

    l_var: = j.DEALER_DIM_ID;

    XYZ: = "SELECT" | TO_CHAR (sysdate, 'MY'). ' FROM DEALER_MAST WHERE DEALER_DIM_ID =: l_var';

    EXECUTE IMMEDIATE XYZ
       INTO DEALER_MAST
       USING l_var;


    Concerning

    Etbin

  • How to run execute immediate with variables

    Hi friends,
    How to run execute immediate with variables in v_stmt below?
    I don't know how to declare value I have here.
    Set serveroutput on;
    DECLARE
       i        VARCHAR (20);
       v_stmt   VARCHAR2 (100);
    
       CURSOR c
       IS
          SELECT sqlid FROM temp1;
    
    
    BEGIN
       OPEN c;
    
       LOOP
          FETCH c INTO i;
          EXIT WHEN c%NOTFOUND;
          DBMS_OUTPUT.put_line (i);
          v_stmt := 'select * from table(dbms_xplan.display_cursor('&i',null))'
          execute immediate v_stmt;
       END LOOP;
    
       CLOSE c;
    END;
    /
    Regds,
    Kunwar.

    You must first use a variable binding (named ': v' in the SQL statement in my example):

    set serveroutput on;
    DECLARE
       i        VARCHAR (20);
       v_stmt   VARCHAR2 (100);
    
       CURSOR c
       IS
           -- modified for a quick test
          SELECT sql_id FROM v$sql where child_number > 2;
    
    BEGIN
       OPEN c;
    
       LOOP
          FETCH c INTO i;
          EXIT WHEN c%NOTFOUND;
          DBMS_OUTPUT.put_line (i);
          v_stmt := 'select * from table(dbms_xplan.display_cursor(:v,null))';
          execute immediate v_stmt using i;
       END LOOP;
    
       CLOSE c;
    END;
    /
    

    However because your SELECT statement returns multiple lines, you need to adapt your code to process all rows returned (as already suggested in first response to your message).

    Instead of using the PL/SQL, I recommend you to generate a SQL file using only SQL, and then run the generated SQL file.
    For example:

    spool edx.sql
    set serveroutput on
    declare
    v_stmt varchar2(100);
    v_q char(1):='''';
    begin
    dbms_output.put_line('spool edx.log');
    for s in (select sql_id from v$sql where child_number >2)
     loop
      dbms_output.put_line('select * from table(dbms_xplan.display_cursor(' || v_q || s.sql_id || v_q || ',null));');
     end loop;
     dbms_output.put_line('exit');
    end;
    /
    spool of
    

    This generates a file similar to:

    spool edx.log
    select * from table(dbms_xplan.display_cursor('5rygsj4dbw6jt',null));
    select * from table(dbms_xplan.display_cursor('5rygsj4dbw6jt',null));
    select * from table(dbms_xplan.display_cursor('5rygsj4dbw6jt',null));
    select * from table(dbms_xplan.display_cursor('fsbqktj5vw6n9',null));
    select * from table(dbms_xplan.display_cursor('6q42j0018w7t8',null));
    select * from table(dbms_xplan.display_cursor('a5mmhrrnpwjsc',null));
    select * from table(dbms_xplan.display_cursor('3c1kubcdjnppq',null));
    select * from table(dbms_xplan.display_cursor('3c1kubcdjnppq',null));
    select * from table(dbms_xplan.display_cursor('9gkq7rruycsjp',null));
    select * from table(dbms_xplan.display_cursor('f0wj261bm8snd',null));
    select * from table(dbms_xplan.display_cursor('ab3swhv5g138y',null));
    select * from table(dbms_xplan.display_cursor('6vgvyh4xw9c5g',null));
    select * from table(dbms_xplan.display_cursor('ak5crjygnpk60',null));
    select * from table(dbms_xplan.display_cursor('9p6bq1v54k13j',null));
    select * from table(dbms_xplan.display_cursor('19x1189chq3xd',null));
    select * from table(dbms_xplan.display_cursor('7sx5p1ug5ag12',null));
    select * from table(dbms_xplan.display_cursor('730vdzhng6m6g',null));
    select * from table(dbms_xplan.display_cursor('730vdzhng6m6g',null));
    select * from table(dbms_xplan.display_cursor('0v3dvmc22qnam',null));
    select * from table(dbms_xplan.display_cursor('0v3dvmc22qnam',null));
    select * from table(dbms_xplan.display_cursor('a1zv6wju3ftgv',null));
    select * from table(dbms_xplan.display_cursor('7ng34ruy5awxq',null));
    select * from table(dbms_xplan.display_cursor('7ng34ruy5awxq',null));
    select * from table(dbms_xplan.display_cursor('b2gnxm5z6r51n',null));
    select * from table(dbms_xplan.display_cursor('b2gnxm5z6r51n',null));
    select * from table(dbms_xplan.display_cursor('g4gp07gt2z920',null));
    select * from table(dbms_xplan.display_cursor('1gu8t96d0bdmu',null));
    select * from table(dbms_xplan.display_cursor('g00cj285jmgsw',null));
    select * from table(dbms_xplan.display_cursor('g00cj285jmgsw',null));
    select * from table(dbms_xplan.display_cursor('g00cj285jmgsw',null));
    select * from table(dbms_xplan.display_cursor('bn4b3vjw2mj3u',null));
    select * from table(dbms_xplan.display_cursor('38243c4tqrkxm',null));
    select * from table(dbms_xplan.display_cursor('2abjfnvy5rkyg',null));
    select * from table(dbms_xplan.display_cursor('350f5yrnnmshs',null));
    select * from table(dbms_xplan.display_cursor('350f5yrnnmshs',null));
    select * from table(dbms_xplan.display_cursor('3s1yukp05bzg6',null));
    select * from table(dbms_xplan.display_cursor('3s1yukp05bzg6',null));
    select * from table(dbms_xplan.display_cursor('1tgukkrqj3zhw',null));
    exit
    
    PL/SQL procedure successfully completed.
    

    Edited by: P. Forstmann March 20, 2013 19:06

    Edited by: P. Forstmann March 20, 2013 19:33

Maybe you are looking for