Using variables in table constaraints

Hi,
I am facing problem in using global variables in table constraints. It is giving error "911 : 42000 : java.sql.SQLException: ORA-00911: invalid character".Since I was not able to use project variable s,I have used global variables.
following is the code
insert into DEV_TGT.E$_TEST_TGT
     ERR_TYPE,
     ERR_MESS,
     CHECK_DATE,
     ORIGIN,
     CONS_NAME,
     CONS_TYPE,
     C1,
     C2
select
     'F',
     sysdate,
     '(161666)TEST_2.TEST_TO_TETS_TGT',
     'CHK',
     'CK',     
     C1,
     C2
from     DEV_TGT.I$_TEST_TGT TEST_TGT
where     not      (
          TEST_TGT.C1=#GLOBAL.V_LOAD_ID
          )

Hi,
Did you refreshed or Assigned that variable before using in interface ?
Flow :-
Assgin/Refresh Variable -> interface (with contrsaint using variable)
Also,
If constarint is not an integer please use quotes ( '#GLOBAL.V_LOAD_ID' )
Regards,
Rathish
Edited by: Rathish on Sep 24, 2009 5:44 PM

Similar Messages

  • Using variables as table names. Ideas for alternative designs

    Hi,
    I am designing an application which uses synonyms to pull information from 'client' DBs via DB Links. The synonyms are created with a DB_ID in the name (example: CUSTOMER_100, CUSTOMER_200... where 100 and 200 are DB IDs from 2 separate client DBs.
    I have a procedure which selects data from the synonym based on what DB_ID is passed to the procedure. I want to be able to run this one procedure for any DB_ID that is entered. I am now aware I cannot use variable names for table names and using EXECUTE IMMEDIATE doesnt seem to fit for what I am trying to do.
    Does anybody have any suggestions or re-design options I could use to achieve this generic procedure that will select from a certain synonym based on the DB info input parameters? Thanks.
    CREATE OR REPLACE PROCEDURE CUSTOMER_TEST(p_host IN VARCHAR2, p_db_name IN VARCHAR2, p_schema IN VARCHAR)
    IS
       v_hostname     VARCHAR2 (50) := UPPER (p_host);
       v_instance     VARCHAR2 (50) := UPPER (p_db_name);
       v_schema     VARCHAR2 (50) := UPPER (p_schema);
       v_db_id  NUMBER;  
       v_synonym VARCHAR2(50);
       CURSOR insert_customer
       IS
         SELECT 
           c.customer_fname,
           c.customer_lname
         FROM v_synonym_name c;
    BEGIN
    -- GET DB_ID BASED ON INPUT PARAMETERS       
      select d.db_id
      into v_db_id
      from  t_mv_db_accounts ac,
      t_mv_db_instances i,
       t_mv_dbs d,
       t_mv_hosts h
      where ac.db_ID = d.db_ID
      and i.db_ID = d.db_ID
      and i.HOST_ID = h.host_id
      and upper(H.HOST_NAME) = v_hostname
      and upper(D.DB_NAME) = v_instance
      and upper(Ac.ACCOUNT_NAME) = v_schema;
      --APPEND DB_ID TO THE SYNOYNM NAME
      v_synonym := 'CUSTOMER_'||v_db_id;
      FOR cust_rec IN insert_customer
      LOOP
         INSERT INTO CUSTOMER_RESULTS (First_Name, Last_Name)
         VALUES (cust_rec.customer_fname, cust_rec.customer_lname);
      END LOOP;
      COMMIT;
    END;
    Rgs,
    Rob

    Hi
    rules engine style with table that holds the logic or code SQL directly in the procedure and IF THEN ELSE with db_id. Latter is better because SQL is native and objects are checked every time procedure is compiled.
    James showed the simplest way but this rather complex way gives you more flexibility between instances if ever needed.
    CREATE TABLE synonym_dml(db_id number not null primary key, sql_text clob)
    INSERT INTO synonym_dml VALUES (100, 'INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer100')
    INSERT INTO synonym_dml VALUES (200, 'INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer200')
    set serveroutput on size unlimited
    create or replace
    PROCEDURE Execute_Synonym_Dml(p_host VARCHAR2, p_db_name VARCHAR2, p_schema VARCHAR) IS
    BEGIN
      FOR r IN (
        SELECT sql_text FROM synonym_dml
        --  WHERE db_id IN (
        --    SELECT d.db_id
        --    FROM t_mv_db_accounts ac, t_mv_db_instances i, t_mv_dbs d, t_mv_hosts h
        --    WHERE ac.db_id = d.db_id
        --      AND i.db_id = d.db_id
        --      AND i.host_id = h.host_id
        --      AND upper(h.host_name)      = p_hostname
        --      AND upper(d.db_name)        = p_instance
        --      AND upper(ac.account_name)  = p_schema
      LOOP
        DBMS_OUTPUT.PUT_LINE('-- executing immediately ' || r.sql_text);
        --EXECUTE IMMEDIATE r.sql_text;
      END LOOP;
    END;
    create or replace
    PROCEDURE Execute_Synonym_Dml_Too(p_host VARCHAR2, p_db_name VARCHAR2, p_schema VARCHAR) IS
      PROCEDURE DB_ID_100 IS
      BEGIN
        DBMS_OUTPUT.PUT_LINE('-- executing DB_ID_100');
        --INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer100;
      END;
      PROCEDURE DB_ID_200 IS
      BEGIN
        DBMS_OUTPUT.PUT_LINE('-- executing DB_ID_200');
        --INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer200;
      END;
    BEGIN
      FOR r IN (
        SELECT 100 db_id FROM dual
        --  SELECT d.db_id
        --  FROM t_mv_db_accounts ac, t_mv_db_instances i, t_mv_dbs d, t_mv_hosts h
        --  WHERE ac.db_id = d.db_id
        --    AND i.db_id = d.db_id
        --    AND i.host_id = h.host_id
        --    AND upper(h.host_name)      = p_hostname
        --    AND upper(d.db_name)        = p_instance
        --    AND upper(ac.account_name)  = p_schema
      LOOP
        IF (r.db_id = 100) THEN
          DB_ID_100;
        ELSIF (r.db_id = 200) THEN
          DB_ID_200;
        ELSE
          RAISE_APPLICATION_ERROR(-20001, 'Unknown DB_ID ' || r.db_id);
        END IF;
      END LOOP;
    END;
    EXECUTE Execute_Synonym_Dml('demo','demo','demo');
    EXECUTE Execute_Synonym_Dml_Too('demo','demo','demo');
    DROP TABLE synonym_dml PURGE
    DROP PROCEDURE Execute_Synonym_Dml
    table SYNONYM_DML created.
    1 rows inserted.
    1 rows inserted.
    PROCEDURE EXECUTE_SYNONYM_DML compiled
    PROCEDURE EXECUTE_SYNONYM_DML_TOO compiled
    anonymous block completed
    -- executing immediately INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer100
    -- executing immediately INSERT INTO customer_results (first_name, last_name) SELECT customer_fname,customer_lname FROM customer200
    anonymous block completed
    -- executing DB_ID_100
    table SYNONYM_DML dropped.
    procedure EXECUTE_SYNONYM_DML dropped.

  • Using variable as table name in pl/sql query - Is possible?

    I am relatively new to PL/SQL and I am trying to create a function that accepts a table name and a rowid as arguments and returns a comma-delimited record string of the values of the table/rowid being passed. The problem is , I cannot code a select stmt as follows
    SELECT * FROM v_table_name
    WHERE rowid = v_row_id
    in PL/SQL. There must be a easy way to approach this.
    Thanks for any and all advice.
    GC

    I don't understand the use of the concat symbol along with the commas and field namesYou just need (if you really need it) to create variable which contains you column separated by comma:
    Simple example (in the second case separate variables are used to create
    the list of columns):
    SQL> declare
      2   rc sys_refcursor;
      3   cols varchar2(200) := 'ename, empno, sal';
      4   tab varchar2(30) := 'emp';
      5  begin
      6   open rc for 'select ' || cols || ' from ' || tab;
      7   close rc;
      8  end;
      9  /
    PL/SQL procedure successfully completed.
    SQL> declare
      2   rc sys_refcursor;
      3 
      4   ename_col varchar2(10) := 'ename';
      5 
      6   empno_col varchar2(10) := 'empno';
      7 
      8   sal_col varchar2(10) := 'sal';
      9 
    10   tab varchar2(30) := 'emp';
    11 
    12  begin
    13 
    14   open rc for 'select ' || ename_col || ',' || empno_col || ',' || sal_col ||
    15   ' from ' || tab;
    16 
    17   close rc;
    18  end;
    19  /
    PL/SQL procedure successfully completed.Rgds.

  • How to write - Perform using variable changing tables

    hi Gurus,
    I am facing an issue while writing a perform statement in my code.
    PERFORM get_pricing(zvbeln) USING nast-objky
                                  CHANGING gt_komv
                                           gt_vbap
                                           gt_komp
                                           gt_komk.
    in program zvbeln :-
    FORM get_pricing  USING    p_nast_objky TYPE nast-objky
                      tables   p_gt_komv type table komv
                               p_gt_vbap type table vbapvb
                               p_gt_komp type table komp
                               p_gt_komk type table komk.
      BREAK-POINT.
      DATA: lv_vbeln TYPE vbak-vbeln.
      MOVE : p_nast_objky  TO lv_vbeln.
      CALL FUNCTION '/SAPHT/DRM_ORDER_PRC_READ'
        EXPORTING
          iv_vbeln = lv_vbeln
        TABLES
          et_komv  = p_gt_komv
          et_vbap  = p_gt_vbap
          et_komp  = p_gt_komp
          et_komk  = p_gt_komk.
    ENDFORM.                    " GET_PRICING
    But its giving an error . please let me know how i can solve this .

    Hi,
    Please incorporate these changes and try.
    perform get_pricing(zvbeln) TABLES gt_komv gt_vbap gt_komp gt_komk
                                            USING nast-obky.
    in program zvblen.
    Form get_pricing TABLES p_gt_komv type table komv
                                           p_gt_vbap type table vbapvb
                                           p_gt_komp type table komp
                                           p_gt_komk type table komk
                              USING p_nast_objky TYPE nast-objky.
    REST OF THE CODE SAME.
    End form.
    Note : Please check lv_vbeln after the move statement.
    Hope this will help you.
    Regards,
    Smart Varghese

  • Using variables to insert data in the table

    I want to insert datas in the table. I use constants,
    all the constants are stored properly in the table. But,
    when I use variables I get the error message
    "Too few parameters. expected 6".
    (I declared all the fields of the table as text only.)
    My program is "newt.jsp"
    <%@ page language="java" import="java.sql.*" %>
    <html>
    <head>
    <title>storing customer information in the database</title>
    </head>
    <body>
    <%
    String cno1 = request.getParameter("cno");
    String n1 = request.getParameter("n");
    String add11 = request.getParameter("add1");
    String add21 = request.getParameter("add2");
    String phone1 = request.getParameter("phone");
    String email1 = request.getParameter("email");
    Connection con = null;
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:customer"," "," ");
    Statement statement1 = con.createStatement();
    Statement statement2 = con.createStatement();
    statement2.executeUpdate("create table cust1 (cno varchar(20),n varchar(20),add1 varchar(20),add2 varchar(20),phone varchar(20),email varchar(20))");
    statement1.executeUpdate("insert into cust1 (cno,n,add1,add2,phone,email) values(cno1,n1,add11,add21,phone1,email1)");
    catch(SQLException sqle) {
    System.err.println(sqle.getMessage());
    catch(ClassNotFoundException cnfe) {
    System.err.println(cnfe.getMessage());
    catch(Exception e) {
    System.err.println(e.getMessage());
    finally {
         try {
         if(con!=null) {
              con.close();
    catch(SQLException sqle) {
    System.err.println(sqle.getMessage());
    %>
    <br><br>
    Mr./Ms. <%=n1 %> <br>
    Your datas have been stored.<br>
    </body>
    </html>
    Those who know answer please reply.
    My thanks in advance.

    I would expect your insert statement to be this:
    statement1.executeUpdate("insert into cust1 (cno,n,add1,add2,phone,email) values('"+cno1+"','"+n1+"','"+add11+"','"+add21+"','"+phone1+"','"+email1+"')");
    If you just create a string, it's not going to fill in variables into the string by magic.

  • Using variable as a table name

    hi i want to use a variable as table in plsql block
    like
    declare cursor c1
    select to_char(to_date(substr(appl_uid,21,2),'MM'),'MON')||'_'|| as v_Tab,ename from my_table;
    v_ename = varchar(55);
    vv_table =varchar(6);
    begin
    open c1
    fetch c1 into vv_table,v_ename
    select ename into v_ename from vv_table;
    DBMS_OUTPUT.PUT_LINE (v_ename);
    close c1
    end;
    please help me to correct this block

    As mentioned by BlueShadow above the following statement will fail if the table has more then one row.
    EXECUTE IMMEDIATE 'select ename from ' || vv_table INTO v_ename;So I would suggest you use ref curosr to execute a SELECT dynamically which is likely to return more then one row.
    SQL> create table my_table (appl_uid VARCHAR2(30),ename varchar2(30));
    Table created.
    SQL> insert into my_table values ('123456789012345678901234567890','SCOTT');
    1 row created.
    SQL> insert into my_table values ('123456789012345678901123456789','WARD');
    1 row created.
    SQL> create table nov_ (ename varchar2(30));
    Table created.
    SQL> insert into nov_ values ('SMITH');
    1 row created.
    SQL> insert into nov_ values ('JAMES');
    1 row created.
    SQL> insert into nov_ values ('JONES');
    1 row created.
    SQL> create table dec_ (ename varchar2(30));
    Table created.
    SQL> insert into dec_ values ('ALLEN');
    1 row created.
    SQL> insert into dec_ values ('ADAMS');
    1 row created.
    SQL> insert into dec_ values ('KING');
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> set serveroutput on
    SQL> declare
      2        cursor c1 is
      3        select to_char(to_date(substr(appl_uid, 21, 2), 'MM'), 'MON') || '_' as v_tab,ename
      4        from my_table;
      5        type ref_cur is ref cursor;
      6        c2 ref_cur;
      7        v_ename   varchar(55);
      8  begin
      9        for rec in c1 loop
    10          open c2 for 'select ename from ' || rec.v_tab;
    11          DBMS_OUTPUT.PUT_LINE('********************'||rec.v_tab||'********************');
    12          loop
    13              fetch c2 into v_ename;
    14              exit when c2%notfound;
    15              DBMS_OUTPUT.PUT_LINE(v_ename);
    16          end loop;
    17          close c2;
    18        end loop;
    19 end;
    23 /
    ********************DEC_********************
    ALLEN
    ADAMS
    KING
    ********************NOV_********************
    SMITH
    JAMES
    JONES
    PL/SQL procedure successfully completed.And at last as suggested by fellow members that it is a bad idea, I would agree and suggest you to relook your design.
    Edited by: zahid79 on Jul 22, 2010 10:28 PM

  • A way to find as to a variable from table TAVRV is used in which program?

    Hello Experts,
    Is there a way to find as to a variable from table TAVRV is used in which of the variants and in what programs. Example: can we find a variable ZZ_AAAA_ACTUEL (from table TVARV) is used in which variants / programs?
    I want maintain one variable and i will be sure that not affect others programs.
    Regards.

    Hi Salhi
    open your table in SE11 and click on that variable, then there is a option 'where used list' in your application tool bar
    click on that option, it will give you a small pop up window from where you can select in which options you want to search for that variable.
    i hope this will work for you
    Thanks
    lalit Gupta

  • Help with using variable for name of table in PLSQL block...

    I am trying to use a variable for the name of a table but getting errors ...i am sure I am close to the correct form here but something is wrong. I sure would appreciate some help!
    DECLARE
    ln_month Number;
    ln_day Number;
    ln_year Number;
    ls_year VarChar2(4);
    ls_prev_table VarChar2(30);
    ls_cur_table VarChar2(30);
    ln_prev_year Number;
    ls_prev_year VarChar2(4);
    ln_prev_month Number;
    BEGIN
    Select To_Number(To_Char(sysdate, 'MM')) into ln_month from dual;
    Select To_Number(To_Char(sysdate, 'DD')) into ln_day from dual;
    Select To_Number(To_Char(sysdate, 'YYYY')) into ln_year from dual;
    If ln_month = 01 Then
    ls_cur_table := "T_CPRS_FDW_CUR_JAN_ACTUALS";
    ls_prev_table := "T_CPRS_FDW_PREV_DEC_ACTUALS";
    ln_prev_year := ln_year - 1;
    /***above is where I am trying to use variables for assignement to years and months tables***//// ln_prev_month := 12;
    End If;
    /*------MORE IF STATEMENTS FOR EACH MONTH ---OF --THE YEAR ...AND its the following 2 variable statements that the compiler doesnt like! */
    If ln_day < 20 Then
    Delete from :ls_prev_table;
    INSERT INTO :ls_prev_table /*(STUFF TO BE INSERTED GOES HERE)*/
    HELP PLEASE!
    null

    Hi,
    The parser does not under variables directly in dml statements.u need to form a statement and the parse and execute the same...
    so the soln is
    Declare
    lv_stmt varchar2(250);
    Begin
    lv_stmt := 'Delete from '&#0124; &#0124;ls_prev_table;
    execute immediate lv_stmt;
    -- Same is the case with the insert stmt--
    End;
    This should solve ur problem.
    u could also give a direct call like
    execute immediate 'Delete from '&#0124; &#0124;ls_prev_table ;
    Note: This statement "execute immediate" holds good for oracle versions 8.x and above which makes the stmt very simple. For lower version u need to use the dbms_sql package to parse and execute the statement which has a series of statements for the same.
    Kiran

  • How to use variables with

    I need to get the number of lines in internal table, which would
    be easy, using DESCRIBE TABLE itab LINES lines. But the problem
    is, that I get the name of this internal table in the field of
    another internal table, so I have to use the name of internal
    table as variable, but I don't know how to use variables with
    DESCRIBE TABLE (or if this is possible).

    Hi,
    REPORT ZPRUEBA782 .
    define two tables with diferent structures.
    data: begin of table1 occurs 0,
    registro type i,
    end of table1.
    data: begin of table2 occurs 0,
    registro type i,
    repid like sy-repid,
    end of table2.
    data: rows type i.
    start-of-selection.
    fill them with data
    do 1000 times.
    table1-registro = sy-tabix.
    append table1.
    enddo.
    do 1757 times.
    table2-registro = sy-tabix.
    table2-repid = sy-repid.
    append table2.
    enddo.
    call a form that receives as input the table and returns the number
    of rows as output.
    perform howmanyrows tables table2 changing rows.
    break-point. "evaluate the number of rows
    perform howmanyrows tables table1 changing rows.
    break-point. "evaluate the number of rows
    end-of-selection.
    form howmanyrows tables itable changing rows.
    rows = 0.
    loop at itable.
    add 1 to rows.
    endloop.
    endform.
    You can try it if you don't find a better solution.
    Cheers,
    Chaitanya.

  • Customer exit variable - internal table in BEX

    Hi,
    i am running a report and using variables in it.
    The report runs over a info cube. There are few challenges in it.
    One of the variable is posting date, and when user enters posting date i need to negate it with current system date.
    If the negated value is greater than 28 then i need to exclude documnet type 'YG' and display the query, else i need to include the dcumnet type 'YG' and document type '  '.  The above logic can be well implemented via a customer exit variable(for posting date) using an internal table. We have internal tables like C_T_DATA which is used in data source enhancement, which help us to implement our own desired logic.
    Do we have such kind of internal tables, based on which the report output (result set) is derived?
    i know that we have l_t_range and e_t_range, but dont know their usage, some one can explain in detail about them?
    Thanks in advance.

    Hi Selva & Lakshmin,
    The code given by Selva is almost correct . If my understanding is clear , you also wanted to include  document type ' ' when the negated value is less than 28 .
    Modification in Selvas Code :
    Variable 'V_DOCTYP' must be of type Multiple Single Values.
    DATA : V_DATE LIKE SY-DATUM.
    DATA : V_DAYS TYPE I.
    if i_step = 2.
    when 'V_DOCTYP'.
    READ TABLE i_t_var_range INTO loc_var_range WITH KEY vnam = 'ZV_PDATE''.
    IF SY-SUBRC = 0.
    V_DATE = loc_var_range-low.
    ENDIF.
    V_DAYS = SY-DATUM - V_DATE.
    IF V_DAYS > 28.
    l_s_range-low = 'YG'
    l_s_range-sign = 'E'.
    l_s_range-opt = 'EQ'.
    APPEND l_s_range TO e_t_range.
    ELSE.
    l_s_range-low = 'YG'
    l_s_range-sign = 'I'.
    l_s_range-opt = 'EQ'.
    APPEND l_s_range TO e_t_range.
    clear l_s_range.
    l_s_range-low = ' '.
    l_s_range-sign = 'I'.
    l_s_range-opt = 'EQ'.
    APPEND l_s_range TO e_t_range.
    ENDIF.
    ENDIF.
    Hope the above reply was helpful.
    Kind Regards,
    Ashutosh Singh

  • How to use variables in data slices?

    Hello,
    in BI-IP I have tried to use variables in a data slice.
    The user should fill these variables.
    How can one use and fill these variables?
    Thank you
    Daniel

    Hello Horst,
    data slice is a very strong system lock. It is normally not a good decission to allow users to control this part becuse it sould be in administration of a responsible person.
    If you allow users in the web to open or close data slices, this is like a "open period" funtion in financials: Think about what could happen, if anyone else than the responsible person could do that....
    This is my point of view.
    I would do it in anoter way: Create an User exit and fill a variable like desribed above. You read each line and make a decission whether the user might see this line or not (e. g. period open? yes or no?). The period and the status for the period could be maintained in a table or in a characteristic. table might be easier.
    regards
    Eckhard

  • Problem with Multimapping using Variable Susbtitution

    Hi,
    I have done a Multi-Mapping where I have used variable substitution in the mapping
    The problem I am facing is that when my target message generates multiple messages the files are creating successfully on the FTP server but if only a
    single message generates on the target side then my message is successfully processed in IS but in adapter engine the message status is in "Waiting" state.
    When i see the audit log i found the following details:
    Time Stamp Status Description
    2007-09-18 06:10:24 Success The message was successfully received by the messaging system. Profile: XI URL: https://dx1-60.ra.rockwell.com:56001/MessagingSystem/receive/AFW/XI
    2007-09-18 06:10:24 Success Using connection AFW. Trying to put the message into the receive queue.
    2007-09-18 06:10:24 Success Message successfully put into the queue.
    2007-09-18 06:10:24 Success The message was successfully retrieved from the receive queue.
    2007-09-18 06:10:24 Success The message status set to DLNG.
    2007-09-18 06:10:24 Error Unable to find channel ID
    2007-09-18 06:10:24 Error Delivery of the message to the application using connection AFW failed, due to: Couldn't find delivery channel for message: 46ee0b73-f266-3794-e100-000082974e17.
    2007-09-18 06:10:24 Success The asynchronous message was successfully scheduled to be delivered at Tue Sep 18 06:15:24 GMT 2007.
    2007-09-18 06:10:24 Success The message status set to WAIT.
    2007-09-18 06:15:24 Success Retrying to deliver message to the application. Retry: 1
    Iam using SP14
    Can anyone help me to solve the above problem

    DATA: l_tabname TYPE tabname .
    DATA : gi_mara TYPE TABLE OF mara ,
           gi_makt TYPE TABLE OF makt .
    l_tabname = 'MARA' .
    DATA         : l_dref TYPE REF TO data.
    FIELD-SYMBOLS: <li_itab> TYPE ANY TABLE.
    CREATE DATA l_dref TYPE TABLE OF (l_tabname).
    ASSIGN l_dref->* TO <li_itab>  .
    *Define another field symbol and asign it to right internal table
    *here naming of internal table is important
    FIELD-SYMBOLS : <fs_tab> TYPE ANY TABLE .
    CONCATENATE 'GI_' l_tabname INTO l_tabname .
    ASSIGN (l_tabname) TO <fs_tab>.
    <fs_tab> = <li_itab> .

  • INSERT statement in JSP using variables

    People,
    I am having problems inserting data from JSP into a MySQL database.
    For example the following works perfectly fine:
    String query = "INSERT INTO `test2` (`name`, `topic`, `message`) VALUES ('Jane Doe', 'Hi there', 'Example message')";
    But, however the problems take place if I try to use variable values as parameters instead of pre-defined strings.
    E.g. the following (among a 100 other ways I have tried by now) does not work):
    String query = "INSERT INTO `test2` (`name`) VALUES (`" + userName +"`)";
    stmt.executeUpdate(query);
    This did not work either:
    PreparedStatement PStmt = myConn.prepareStatement("insert into (`name`) values (?)");
    PStmt.setString(1, new String("`" + userName + "`"));
    PStmt.executeUpdate();
    I have tried without parenthesis etc. but what I pretty much get every time is:
    500 Servlet Exception
    java.sql.SQLException: Column not found: Unknown column 'Jane' in 'field
    list'
         at org.gjt.mm.mysql.MysqlIO.sendCommand(MysqlIO.java:508)
         at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(MysqlIO.java:561)
         at org.gjt.mm.mysql.MysqlIO.sqlQuery(MysqlIO.java:646)
         at org.gjt.mm.mysql.Connection.execSQL(Connection.java:973)
         at org.gjt.mm.mysql.Connection.execSQL(Connection.java:897)
         at org.gjt.mm.mysql.Statement.executeUpdate(Statement.java:230)
         at org.gjt.mm.mysql.jdbc2.Statement.executeUpdate(Statement.java:99)
         at sql3_jsp._jspService(/sql3.jsp:49)
         at com.caucho.jsp.JavaPage.service(JavaPage.java:87)
         at com.caucho.jsp.JavaPage.subservice(JavaPage.java:81)
         at com.caucho.jsp.Page.service(Page.java:474)
         at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:166)
         at com.caucho.server.http.Invocation.service(Invocation.java:277)
         at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
         at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:334)
         at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:266)
         at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
         at java.lang.Thread.run(Thread.java:484)
    I do not know much about SQL or JDBC but the material I have seen makes me believe
    that I am pretty much doing the right thing.
    What is the right way of doing this?
    I would greatly appreciate any feedback.

    Hi,
    I think i know the problem.
    Take a look on your String code :
    "INSERT INTO `test2` (`name`, `topic`, `message`) VALUES ('Jane Doe', 'Hi there', 'Example message')";
    it is not necessary to put QUOTE for the tablename and the fields.
    my code work with :
    String query = "INSERT INTO test2 VALUES( ' " + 123 + " ' ) ";
    ( if you inserting into all fields in your table ) OR
    String query = "INSERT INTO test2 ( abc ) VALUES( ' " + 123+ " ' ) ";
    ( if you need to select certain fields ).
    or you can try to refer to :
    http://www.w3schools.com/sql/sql_insert.asp
    hope this help.

  • Using Variables in SQL*PLUS

    Hi,
    I hope to get any insight possible. I am using External tables and the Default directory is set. Now the process is that I get an automatic downloads of files placed in that directory. They are all to have the same naming system.
    Test_June_2006 or Test_July_2006 and so on. Basically the month will be one behind, so Since it is August, I am looking for Test_July_2006.
    I was able to set the "location" parameter to accept a variable, but i am having some trouble with set the value to that variable.
    My code:
    define month = EXTRACT(MONTH FROM CURRENT_DATE)-1||'_'||EXTRACT(YEAR FROM CURRENT_DATE).txt
    variable month varchar2(100)
    drop table ext_Test;
    create table ext_Test
    (field1      varchar2(25),
    field2      varchar2(10),
    field3     varchar2(10),
    field4 varchar2(15),
    field5 Float,
    field6     Float,
    field7 Float
    organization external
    ( default directory sourcedata
    access parameters
    ( records delimited by newline
    SKIP 1
    fields terminated by ','
    OPTIONALLY ENCLOSED BY '"'
    missing field values are null
    location ('Test_&month')
    reject limit 0;
    When I tried "location ('&month') and setting month to July, it worked fine, but now that I am adding functions, it is not setting the variable properly.
    Any help would be appreciated. Thank you.

    You cannot use & substitution variable to replace file name dynamically.
    You will have to use the ALTER TABLE command at run time to alter the location of the file to what you want before you start processing.
    SQL> create table ext_Test
      2  (field1 varchar2(25),
      3  field2 varchar2(10),
      4  field3 varchar2(10),
      5  field4 varchar2(15),
      6  field5 Float,
      7  field6 Float,
      8  field7 Float
      9  )
    10  organization external
    11  ( default directory sourcedata
    12  access parameters
    13  ( records delimited by newline
    14  SKIP 1
    15  fields terminated by ','
    16  OPTIONALLY ENCLOSED BY '"'
    17  missing field values are null
    18  )
    19  location ('Test_&month')
    20  )
    21  reject limit 0;
    Enter value for month: july
    old  19: location ('Test_&month')
    new  19: location ('Test_july')
    Table created.
    SQL> alter table ext_test location('Test_August') ;
    Table altered.
    SQL>

  • Best options to use in Temp Table

    Hello,
    I was just trying to figure out the best options we can choose with when we come across a scenario where we need to use a  Temp Table/Table Variable/Create
    a Temp Table on the fly.
    However, I could not see any big difference in using those options. As per my understanding using a table variable is more convenient if the query logic is
    small and the result set also will be comparatively small.Creating a temp table is also an easy option but it takes much time and we can not create any indexes on it. I am working on a query optimization task where in plenty of temp tables are used
    and the query takes more than five minutes to execute. We have created few indexes and all in few tables and reduced the query execution time up to 2 mnts.Can anyone give me more suggestions on it. I have gone through various articles about it and came to
    know that there is no one solution for this and I am aware of the basic criteria like  use Set No count on, Order the table in which the indexes are created, Do not use Select * instead use only columns which are really required, Create Indexes
    and all. Other than these I am stuck with the usage of temp tables. There are some limitations where I can convert all the Temp table logic to CTE (I am not saying its not possible, I really dont have time to spend for the conversion). Any suggestions are
    welcome.
    Actual Query
    select Code,dbo.GetTranslatedText(Name,'en-US')
    as Name from ProductionResponse.ProductionResponse
    00.00.02
    5225 rows
    With Table Variable
    DECLARE  @General
    TABLE(Code
    NVarchar(Max),Name
    NVarchar(Max)
    INSERT
    INTO @General
    select Code,dbo.GetTranslatedText(Name,'en-US')
    AS Name  from ProductionResponse.ProductionResponse
    select
    * from @General
    00.00.03
    5225 rows
    With an Identity Column
    DECLARE  @General
    TABLE(Id
    INT IDENTITY(1,1)
    ,Code NVarchar(Max),Name
    NVarchar(Max)
    INSERT
    INTO @General
    select Code,dbo.GetTranslatedText(Name,'en-US')
    AS Number  from ProductionResponse.ProductionResponse
    select
    * from @General
    00.00.04
    5225 rows
    With Temp Table:
    CREATE
    TABLE #General (Id
    INT IDENTITY(1,1)
    PRIMARY KEY,Code
    NVarchar(Max),Name
    NVarchar(Max)
    INSERT
    INTO #General
    select Code,dbo.GetTranslatedText(Name,'en-US')
    as Name from ProductionResponse.ProductionResponse
    select
    * from #General
    DROP
    TABLE #General
    00.00.04
    5225 rows
    With Temp Table on the Fly
    SELECT G.Code,G.Name
    INTO #General  
    FROM
    select Code,dbo.GetTranslatedText(Name,'en-US')
    as Name from ProductionResponse.ProductionResponse
    )G
    select
    * from #General
    00.00.04
    5225 rows

    >> I was just trying to figure out the best options we can choose with when we come across a scenario where we need to use a Temp Table/Table Variable/Create a Temp Table on the fly. <<
    Actually, we want to avoid all of those things in a declarative/functional language. The goal is to write the solution in a single statement. What you are doing is mimicking a scratch tape in a 1950's tape file system. 
    Another non-declarative technique is to use UDFs, to mimic 1950's procedural code or OO style methods. Your sample code is full of COBOL-isms! In RDBMS we follow ISO-11179 rules, so we have “<something in particular>_code” rather than just “code” like
    a field within a COBOL record. The hierarchical record structure provides context, but in RDBMS, data elements are global.  Or better, they are universal names. 
    >> I am aware of the basic criteria like use SET NO COUNT ON, Order the table in which the indexes are created, Do not use SELECT * instead use only columns which are really required, CREATE INDEXes and all.<<
    All good, but you missed others. Never use the same name for a data element (scalars) and a table (sets). Think about what things like “ProductionResponse.production_response” means. A set with one element is a bit weird, but that is what you said. Also, what
    is this response? A code? A count? It lacks what we call an attribute property. 
    This was one of the flaws we inherited when ANSI standardized SQL and we should have fixed it. Oh well, too late now. 
    Never use NVARCHAR(MAX). Why do you need to put all of the Soto Zen sutras in Chinese Unicode? When you use over-sized data elements, you eventually get garbage data. 
    >> Other than these I am stuck with the usage of temp tables. There are some limitations where I can convert all the Temp table logic to CTE (I am not saying its not possible, I really do not have time to spend for the conversion). Any suggestions are
    welcome.<<
    Yes! This is how we do declarative/functional programming! Make the effort, so the optimizer can work, so you can use parallelism and so you can port your code out of T-SQL dialect. 
    --CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
    in Sets / Trees and Hierarchies in SQL

Maybe you are looking for