Can't just use the a_VALUES_ARRAY -> "PLS-00457: expressions have to be of
SQL types".

DROP TABLE tab_a purge;

CREATE TABLE TAB_A
  (
    A VARCHAR2(100 BYTE),
    B VARCHAR(100 BYTE),
    C VARCHAR(100 BYTE)
  );

DECLARE
  TYPE t_ARRAY IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
  a_VALUES_ARRAY t_ARRAY;
  s_SQL_STMT VARCHAR2(4000);
  s_COL_INS  VARCHAR2(4000):='A,B,C';
  s_PLACEH   VARCHAR2(4000):=':VAL1,:VAL2,:VAL3';
BEGIN
  a_VALUES_ARRAY(1) := 'Test';
  a_VALUES_ARRAY(2) := 'Test';
  a_VALUES_ARRAY(3) := 'Test';
  s_SQL_STMT        := 'INSERT INTO TAB_A  (' || s_COL_INS || ') VALUES ('
|| s_PLACEH || ')';
  EXECUTE IMMEDIATE s_SQL_STMT USING a_VALUES_ARRAY(1), a_VALUES_ARRAY(2),
a_VALUES_ARRAY(3);
  COMMIT;
END;




On Thu, Sep 15, 2011 at 5:08 AM, Filippo Biondi <[email protected]> wrote:

> Hi all,
>
> I have this problem: In a loop I have to create dynamically an insert
> statement with a number of bind variables that is not always the same.
>
>
> TYPE t_ARRAY IS TABLE OF VARCHAR2(100) INDEX BY NUMBER;
>
> a_VALUES_ARRAY t_ARRAY;
>
>  <LOOP #1>
>
> <SUB_LOOP fetching s_COL names and v_VALUES values >
>
> s_COL_INS := s_COL_INS || ' ,' || s_COL;  /* for ex. A,B,C */
> s_PLACEH := s_PLACEH || ' ,:VAL' || n_COUNTER; /* for ex.
> :VAL1,:VAL2,:VAL3*/
>
> a_VALUES_ARRAY[ n_COUNTER ] := v_VALUES ;
> n_COUNTER := n_COUNTER +1;
>
> <END SUB_LOOP>
>
>
> s_SQL_STMT := 'INSERT INTO TAB_A  (' || s_COL_INS || ') VALUES (' ||
> s_PLACEH || ')';
>
> EXECUTE IMMEDIATE
> s_SQL_STMT USING <a_VALUES_ARRAY>;  /* (???) Here is the problem */
>
>
> <LOOP #2>
> I can got s_COL_INS = B,C,E,F
>
> <LOOP #3>
> I can got s_COL_INS = A,F
>
> and so on...
>
>  How can use the varray' values  in the using statement???
>
> Thanks in advance!
> Filippo
>
> --
> You received this message because you are subscribed to the Google
> Groups "Oracle PL/SQL" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/Oracle-PLSQL?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en

Reply via email to