Using char type as ID

- create table test (id char(25), value varchar2(100));
- insert into test valus('1', 'my test value'); commit;
(sqlplus> select * from test where id = 1; -- The row is returned
- Create apex page with two text fields test_id, test_value;
- set the source of test_value to:
select value from test where id = :test_id;
- call this page by a url. Passing in the value to test_id.
** Why will the select not work to populate the test_value item?
** If I change the underlying table id type to (number or varchar) it works.
** I know char as an ID is not ideal. Question comes from a modeling mistake.

Hi,
Because APEX is PL/SQL based it will bind the variables.For example:
SQL> desc x;
Name Null? Type
C1 CHAR(25)
C2 VARCHAR2(200)
SQL> select * from x;
C1 C2
1 Hello
SQL> select * from x where c1 = '1'; <------------ No spaces in sqlplus
C1 C2
1 Hello
SQL> variable target varchar2(25)
SQL> exec :target := '1' <------------------- No spaces n bind variable
PL/SQL procedure successfully completed.
SQL> SELECT * FROM x WHERE c1 = :target;
no rows selected
SQL> exec :target := '1 ' <---- Add 24 spaces
PL/SQL procedure successfully completed.
SQL> SELECT * FROM x WHERE c1 = :target;
C1 C2
1 Hello
So when binding an exact match is required.
I think you would be better of changing them to varchars or if they are really numbers then change them to a number.
If you allow an implicit conversion from 1 to '1' then performance my become an issue as any index for the other type would not be used.
Regards

Similar Messages

  • How can I use jbo:InputSelect for a char type filed?

    How can I use <jbo:InputSelect for a char type filed?
    I have two tables. One is room (primary key is room(type is char)), another table is responsibility (foreign ker is room(type is char)). Both tables have same length for room column.
    There is a problem:
    If I use (in the "DataEditComponent.jsp" file)
    <jbo:InputSelect multiple="false" datasource="dsEdit" displaydatasource="roomData" displaydataitem="ROOM" displayvaluedataitem="ROOM" ></jbo:InputSelect>
    to get the room input for responsibility from combobox(Datasource roomData is from room table). In the form the room field cannot bind the data in combobox, alway select the first item. And if I select one item and click the update button.There is an error message:
    Error Message: JBO-27010: Attribute set with value H409 for Room in Responsibility has invalid precision/scale
    I found If I changed the field type from char to varchar2 in database also change the entity objects, it works well. I wonder if there are any diffrence using <jbo:InputSelect tag in char and varchar2 type. How can I use <jbo:InputSelect for a char type filed as i don't want to change my datatype in database at this stage.
    I try this in JDeveloper 9.03, 9.034, 9.04. The result is the same.

    If I were in your shoes, here's how I would do it:
    <%-- Assuming you have dsRoom and dsResponsibility --%>
    <%-- Select is an HTML tag --%>
    <select name="ROOM" size="1">
    <% char roomID =""; // Init your character var
    // Open a rowsetIterator to get the records and add them to the LOV
    <jbo:RowsetIterate datasource="dsResponsibility" changecurrentrow="true" >
    <% roomID = (char)dsResponsibility.getRowSet().getCurrentRow().getAttribute("ROOM"); // Grab the char value
    // add the value to the LOV
    %>
    <option value="<%=roomID%>"><%=roomID%></option>
    </jbo:RowsetIterate>
    </select>
    If you are using this as part of an edit page you may want to utilize the "selected" option of the <option> tag. In one instance I am doing this on an edit page because the use may open an existing record. If I don't account for it, then it will change the DB to contain the first value from the list! You can do a simple check like:
    //Set the current record's char
    char curRecord = (char)rowEdit.getAttribute("ROOM");
    // inside the iterate:
    if (curRecord == roomID) {
    <option value="<%=roomID%>" selected><%=roomID%></option>
    } else {
    <option value="<%=roomID%>" ><%=roomID%></option>
    Hope that helps!

  • Data truncation when using resultset.getString() to a char type field

    In my table ,there is a char type field,such as a char(4) field, for multilanguage use,I put two "double-byte" character in it,
    when I using resultset.getString() to this char type field,I can't get the right result,one char was truncated, so I only get three char, for "double-byte" it 's error code
    this only happen on IBM JVM on AIX 5 , when I use oracle jdbc on windows hotspot vm , it works fine (we use the same oracle on AIX)
    is there any further setting for JDBC driver on AIX ? but it 's thin driver
    and the varchar type works fine at any paltform
    any help ?

    Hi jul!!!
    write like this:
    DATA : wa_flight_data TYPE bapisfldat,
    wa_add_info TYPE bapisfladd,
    wa_availability TYPE bapisflava,
    it_ret TYPE STANDARD TABLE OF bapiret2,
    wa_ret TYPE bapiret2.
    PARAMETERS : pa_carr TYPE sflight-carrid,
    pa_conn TYPE sflight-connid,
    pa_date TYPE sflight-fldate.
    CALL FUNCTION 'BAPI_FLIGHT_GETDETAIL'
    EXPORTING
    airlineid = pa_carr
    connectionid = pa_conn
    flightdate = pa_date
    IMPORTING
    flight_data = wa_flight_data
    additional_info = wa_add_info
    availibility = wa_availability
    TABLES
    *EXTENSION_IN =
    *EXTENSION_OUT =
    return = it_ret.
    write : / 'Flight Data: ',
    wa_flight_data-AIRLINEID,
    wa_flight_data-AIRLINE,
    wa_flight_data-CONNECTID,
    wa_flight_data-FLIGHTDATE,
    wa_flight_data-AIRPORTFR,
    wa_flight_data-CITYFROM,
    wa_flight_data-AIRPORTTO,
    wa_flight_data-CITYTO,
    wa_flight_data-DEPTIME,
    wa_flight_data-ARRTIME,
    wa_flight_data-ARRDATE,
    wa_flight_data-PRICE,
    wa_flight_data-CURR,
    wa_flight_data-CURR_ISO.
    similaryly for wa_add_info and wa_availability.
    becoz u r using work area directly in WRITE statement and
    wa_flight_data TYPE bapisfldat,
    wa_add_info TYPE bapisfladd,
    wa_availability TYPE bapisflava,
    contains both int and char data so u can print all of them together..They can be printed field by field.
    if any doubts..let me knw.
    hope it helps.
    kindly rewrd.

  • Measuring Point during IK01 not allowing characteristics with CHAR type

    Hi Experts,
    Measuring Point during IK01 not allowing characteristics with CHAR type Only allows NUM,
    could you anyone suggest on this.
    Regards
    Nitin

    May i know the reason of such implementation?
    You can use group code and valuation code for assigning predefined values to measuring documents.
    Moreover text field can be used for assigning short text to it.

  • How to pass one sapce to char type variable

    Hi,
    There is one import parameter in rfc "zstat" with char type and length 1. I want to pass value equal to one space in this variable during execution of RFC so that it passes the condition in code where it is not initial.
    But during runtime it doesnt store value equal to one space and become initial.
    So my question is how to pass value equal to one sapce to this variable.?
    Thanks in Advance!!!
    -Harkamal

    Hi!
    If it a char type, then its initial value is a SPACE character.
    If it confuses the program and you wanted to use it another way, then use numbers (type i - integer). It's initial value is "0".
    Or try to use other flag characters, like "T" for true and "F" for false values.
    Regards
    Tamá

  • How to ask CF9 ORM to use CHAR(2)?

    How to ask CF9 ORM to use CHAR(2)? Thanks.

    Your code works.  I realized that sqltype"char(n)" cannot be used as FK for a many-to-one object.
    component persistent=true entityName="parent"
         // this works
         //property name="parentId" fieldtype="id" ormtype="integer";
         // this works
         //property name="parentId" fieldtype="id" ormtype="string" length="2";
         // this doesn't work
         property name="parentId" fieldtype="id" sqltype="char(2)";
    component persistent=true entityName="child"
         property name="childID" fieldtype="id" ormtype="integer" generator="identity";
         property name="parent" fieldtype="many-to-one" fkcolumn="parentId" cfc="parent";
    Throws:
    org.hibernate.JDBCException: Error during DDL export
         at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:345)
         at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:262)
    Caused by: java.sql.SQLException: [Macromedia][SQLServer JDBC Driver][SQLServer]Column 'parent.parentId' is not the same data type as referencing column 'child.parentId' in foreign key 'FK5A3F51CAB69BEF'.
         at macromedia.jdbc.sqlserverbase.BaseExceptions40.createAppropriateSQLExceptionInstance(Unknown Source)

  • Unicode Program : # is appearing for data types declared as char type

    Hi friends,
    I have copied one program on unicode system to unicode system. As only char type data types are allowed, i converted structure EP to char type only. Now during execution it is giving dump because it is showing value as '#' for 2 fields whos original data type was P and currency. How shall i convert them? Any suggession will helpful.
    Abhijit

    Hi Sandeep,
    This is my piece of code : Initially structure EP was used in read dataset which is of different datatypes. so i created similar structure ep_c with data type as char. As u suggested, i  tried to declare field BETRG as type currency. Then also it gave dump. (Runtime errors: UC_OBJECTS_NOT_CHARLIKE). For 2 fields BETRG and POHRS which is of currency and dec type originally, i am getting values as '#' causing in dump. In non unicode program both fields have values as '0.00' If i put these values in debugging then after execution, program comes to selection screen! Kindly advise.
    Data : komok(2) type c,
           betrg(18) TYPE c,
             betrg type betrg,
             pohrs(10) type c.
    open dataset seq-in for input in text mode encoding default ignoring conversion errors.
          if sy-subrc = 0.
            do.
              read dataset seq-in into ep_c.
              case sy-subrc.
                when 0.
                  move :ep_c-id to ep-id,
                        ep_c-text to ep-text,
                        ep_c-abkrs to ep-abkrs,

  • Converting char type to numeric

    hi,
    is there any Function Module that converts char type to numeric.
    thanks.

    hi,
    data : w_num type i,
             w_char type char10.
    Use can asign character to numeric in PGM by using the statement try endtry.
    try .
    w_num = w_char.
    endtry.
    Regards,
    Prabhudas

  • Forms: Oracle AS 10g R2 - parameter with "char" type only limit to 4k

    Hi,
    i have one forms with parameter ":parameter.whole_rights" (Datatype=Char, Length=32767) over design time.
    when i compiled and execute it in old server (Oracle AS 10g R1), it work perfectly but when compiled and execute it over the 10gr2, it always show ora-06502: pl/sql: numeric or value error.
    after some troubleshooting, i found out that the maximum length for "char" type parameter is only 4k. if i assign any string larger than 4k characters, it will show the error as per mentioned but it work on old server...
    anyone have this problem and how to resolve it???
    additional information:
    server is on unix environment.
    Edited by: cy82 on Jun 15, 2010 3:35 AM

    Hi there,
    the application does not use up all the 32k characters, the maximum length it use currently is around 6k.
    the parameter is used to store all the available access right (forms name, button/object name, read, write etc which is very customized & application specific design). every related access right in that parameter will be passed seperately into related form when the form is called to control the view, transaction nature etc.
    as the design involve other system who passed the data in, i not really plan to change it as it involve interface between 2 systems instead try other possible ways (simple and less impact).
    i think i should not say it use up all 32k, i just curious why the application declare the length as 32k over the forms design time but the actual length was only limited to 4k during forms execution time on Oracle AS r2.
    thanks for suggesting me to try the copy build in and i will try it & post the result tomorrow. i think it should work because i saw your quote for the documentation here:
    In Oracle Forms 10g, all parameters of datatype CHAR are limited to 4000 bytes when set or referenced using PL/SQL bind variable notation; for other usages no limit is imposed.
    as the "copy" build in does not use the parameter as PL/SQL bind variable, quite large posibilities it works...will try and update the result tomorrow....
    another question: where did you get the documentation for oracle forms?? i'm searching around and still cant find the quote that you copy from documentation. hopefully you can give me the link for my future reference.
    Edited by: cy82 on Jun 16, 2010 9:58 PM

  • Convert decimal to char type

    Hi all,
    How to convert decimal type length 3(e.g:25.0) to char type.......
    Thanks in advance

    hi,
       data : var_dec type p decimals 3,
              var_char(10).   
    <b>move var_dec to var_char.</b>
    else use FM
          CALL FUNCTION <b>'CEVA_CONVERT_FLOAT_TO_CHAR'</b>
               EXPORTING
                    FLOAT_IMP  = P_ORIGEN
                    FORMAT_IMP = CAMPO_FLOAT
               IMPORTING
                    CHAR_EXP   = C_DESTINO.
    Regards,
    Santosh

  • Help: Connecting Tomcat to CA-IDMS Using JDBC Type 4 Drivers (JNDI)

    Hi there,
    I have a rather interesting / complex problem......creating a connection to CA-IDMS from Tomcat using JDBC type 4 drivers (CA provide the type 4 driver).
    We have a zSeries 9 IBM mainframe running CA-IDMS r16.1, and I need to connect to the IDMS from Tomcat (running on Linux) using the JDBC Type 4 drivers provided by CA.
    At this stage I am struggling with the actual setup and configuration of Tomcat’s server.xml and web.xml files. These are the files where the JDBC configuration is set (I think). I have to setup the CA-IDMS part of the configuration, but that is a different problem. Basically there is a TCP/IP listener on the IDMS, waiting for incoming connections from the JDBC type 4 driver.
    I set up a Tomcat to MySQL connection using MySQL Connector / J, which is a similar kind of process to what I am trying to achieve with IDMS. MySQL connector / J came with a jar file which is placed in Tomcat’s lib folder, and then the JDBC setup for the web application is created in Tomcat's server.xml and web.xml files. You can then connect to the MySQL database using JSP and the configured JDBC driver / connection. The CA-IDMS Server comes with an idmsjdbc.jar file, which I think is the JDBC typr 4 driver. I think it needs to be placed in the Tomcat /lib folder, but I don’t know how to set up the configuration.
    There is a JDBC DriverManager which allows JDBC drivers to connect to CA-IDMS. The DriverManager recognises the following syntax:
    jdbc:idms://hostname:port/database
    This allows the JDBC driver running within Tomcat to connect to the IDMS which is running on the IDM mainframe. CA IDMS r16 supports direct connections from the Type 4 JDBC driver to the Central Version on IDMS. "hostname" is the DNS name or IP address of the machine where the CV is running, and "port" is the IP port that was specified for the listener PTERM (setup on the IDMS side).
    There is a caidms.properties file for the JDBC driver, which is used to specify user ID, password, and optional accounting information. It can also be used to specify physical connection information, allowing an application to connect to a CA-IDMS database without requiring the definition of an ODBC style data source. However, I don’t know where to place this file within the Tomcat setup.
    There is also an IdmsDataSource class. I don’t know where to configure this or how to set it up; the CA-IDMS Server manual states the following:
    This class implements the JDBC DataSource interface. It is used with an application server (Tomcat) providing Java Naming and Directory Interface (JNDI) naming service to establish a connection to a CA IDMS database. IdmsDataSource properties conform to the Java Beans naming conventions and are implicitly defined by public “setter” and “getter” methods. For example, the “description” property, which is required for all DataSource implementations, is set using the setDescription(String) method. The application server may use the java.lang.reflection methods to discover DataSource properties and provide an interface to set them, or may simply require that they are defined in some configuration file. IdmsDataSource properties are used to specify the connection parameters. These properties are the equivalent of the DriverPropertyInfo attributes described in the previous section and can be used to completely define the parameters needed to connect to a database. Like a URL, an IdmsDataSource object can also reference an “ODBC” style data source name, where the connection parameters are defined in the configuration file on Linux.
    Is there anyone that can try to point me in the right direction to setting up the JDBC connection? I am totally new to Java and so the instructions are not making much sense at the moment. Any help, hints, tips…..anything will be greatly appreciated as I have just hit a brick wall here. I can't find much to do with setting up the CA-IDMS Server JDBC type 4 driver online either....if anyone can point me to some resources that would also be extremely useful.
    Kind regards
    Jp

    You say you've managed to get the JDBC driver working
    in an application but not in a JSP. You also say that
    the error you get is
    "com.microsoft.jdbc.sqlserver.SQLServerDriver".
    I'd be willing to bet that the exception that you have
    got is a ClassNotFoundException. I.E. your application
    server hasn't found the JDBC driver classes. The
    application server probably doesn't use your current
    CLASSPATH to look for classes. It will be setup within
    the application server in some way and you'll need to
    check your app server documentation to see how it is
    done.
    Try replacing
    e.printStackTrace();with
    e.printStackTrace(out);to get a full stack trace of your error.
    ColTried it. Got this error when I tried to run the JSP.
    Incompatible type for method. Can't convert javax.servlet.jsp.JspWriter to java.io.PrintWriter.
              e.printStackTrace(out);
    I'm currently using Apache Tomcat 4.0.3 as my JSP/Servlet Container.
    I'm also using Type 4 MS SQL Server 2000 JDBC driver version 2.0 on my NT4.0 Server.
    Do I need to set my JDBC driver in my container? if so, how do I do that?

  • How to use two types of fonts in a richtextdocument

    hello,
           i want to print a barcode and some text into  a richtextdocument
    example:
    this.richTextBox1.AppendText("\n");
    Font f1 = new Font("3 of 9 Barcode", 50);
    this.richTextBox1.Font = f1;
    this.richTextBox1.AppendText("*1234554*");
    Font f2 = new Font("Arial", 20);
    this.richTextBox1.Font = f2;
    this.richTextBox1.AppendText("fooo");
    but it always uses the second one?
    how can i resolve this?
    i want to use two types of fonts in the same rich text document.
    thank you very much!!

    Select some text and then set the SelectionFont property for each selection, e.g.:
    this.richTextBox1.AppendText("\n");
    this.richTextBox1.AppendText("*1234554*");
    richTextBox1.SelectionStart = 1;
    richTextBox1.SelectionLength = 9; //End of first word
    richTextBox1.SelectionFont = new System.Drawing.Font("Tahoma", 10);
    this.richTextBox1.AppendText("fooo");
    richTextBox1.SelectionStart = 10;
    richTextBox1.SelectionLength = 4;
    richTextBox1.SelectionFont = new System.Drawing.Font("Arial", 20);
    Please remember to close your threads by marking helpful posts as answer and then start a new thread if you have a new question.

  • How to use true type font in smartform with ECC6

    hi,expert:
    I want to use true type font "Comic Sans MS.ttf".
    I upload this font file by SE73 named ZTT2I.
    In SE73.. select the Radio button "Font Families" And click on the "True type Font Installation" button. click the font attribute ITALIC。
    Our print device is LP01 and driver is CNSAPWIN
    when I create a new style in smartform using the font ZTT, in preview window the font still like other font.
    Our system is ECC6, SAP_BASIS 700 level0017 packeg SAPKB70017
    how can I solve this problem?
    thaks a lot

    the ABAP forum administrator take this question to netweaver forum.
    Now when I create smartfrom in language EN,it can output correct style of that font.
    But if the smartform is base on language ZH, the output is not correct.
    why? How to solve it?
    thanks a lot

  • Error while creating an outbound idoc using idoc type delvry02

    hi,
         i getting the following error while creating an outbound idoc(outbound shipping notification) using message type " DESADV" and IDOC TYPE " DELVRY02"
    ERROR:
                " SPECIFY EITHER ADDRESS NO OR ADDRESS HANDLE"
    MESSAGE NO: AM053
    Help would be appreciated.
    regards
    leo

    The message is kind of self-explanatory. It seems that some address (delivery address ?) is required but is missing from the IDoc. If it's a syntax error, then the segment with error will appear in red in WE05 transaction.
    It is also possible that you have filled some field that you should have left blank and now SAP is trying to find an address based on that field.
    Check your IDoc contents. It's really hard to tell from the distance since the requirements and configuration could be very different in different systems. Sometimes the OSS note search by message ID and number is also helpful.

  • Error while doing usage decison using moment type 321

    Hi,
    I have created a batch by confirming process order
    (t code COR6). But when I do usage decision for this batch using transaction QA11, material stock from batch created by order gets transferred to new batch.
    When I checked material document, there is complimentory movement for batch created with process order.
    For ex.
    I have created batch 000400 by confirmation of process order.
    Batch stock is in quality stock. Now I want to move this stock to unrestricted, for this I did usage decision using transaction code QA11. After usage decision when I checked material documents then I found that there is only one movement for 321 movement for batch 000400 i.e. for debit no credit (that means there is no complimentary moment) & credit movement exists for new batch 000401 which is created by sytem itself.
    My requirement is that system should not create new batch for material posting while using moment type 321, it shoud post material stock to same batch after usage decision.
    It is urgent issue.

    In the SAP IMG configuration,
    Material Management ->Inventory Management and Physical Inventory -->Movement types --> Copy and Change Movement type(OMJJ)
    In the field screen, select movement type and then "321" and getinto the definition.
    Please verify the field "Create new batch" is empty.
    Other reason could be user-exit or custom code which during material movement does the new batch creation.
    Thanks,
    Srinivas Karri

Maybe you are looking for