Casi insensitive while inserting

I have seen a new feature in oracle10G where we can make oracle case insensitive but it works at select but not at insert.
For example
SQL> create table a(name varchar2(10) primary key);
Table created.
SQL> create table b(name varchar2(10) references a)
2 ;
Table created.
SQL> insert into a values('Pan');
1 row created.
SQL> insert into b values('pan');
insert into b values('pankaj')
ERROR at line 1:
ORA-02291: integrity constraint (DBO.SYS_C00673363) violated - parent key not
found
If i write p in lower case it gives me error in referential integrity.Is there any way where we can insert without checking the case.I dont want to use upper function.

I wouldn't work through a reference constraint.
Maybe through a trigger "instead of" as I show here below, but you have to think about the business rule of such thing :
SQL> create table a(name varchar2(10) primary key);
Table created.
SQL>
SQL> create table b(name varchar2(10) references a);
Table created.
SQL>
SQL> insert into a values('Pan');
1 row created.
SQL>
SQL> insert into b values('pan');
insert into b values('pan')
ERROR at line 1:
ORA-02291: integrity constraint (SYSADM.SYS_C00465443) violated - parent key
not found
SQL>
SQL> drop table b;
Table dropped.
SQL> create table b_tbl(name varchar2(10));
Table created.
SQL> create or replace view b as select * from b_tbl;
View created.
SQL> create or replace trigger trg_bi_b
  2  instead of insert on b
  3  begin
  4      insert into b_tbl
  5      select :new.name
  6      from   a
  7      where  upper(name)=upper(:new.name);
  8      if sql%rowcount = 0 then
  9         raise_application_error(-20001,'Name doesn''t exists into a table');
10      end if;
11  end;
12  /
Trigger created.
SQL> insert into b values('pan');
1 row created.
SQL> insert into b values('Pan');
1 row created.
SQL> insert into b values('pAn');
1 row created.
SQL> insert into b values('PAN');
1 row created.
SQL> insert into b values('paN');
1 row created.
SQL> insert into b values('pankaj');
insert into b values('pankaj')
ERROR at line 1:
ORA-20001: Name doesn't exists into a table
ORA-06512: at "SYSADM.TRG_BI_B", line 7
ORA-04088: error during execution of trigger 'SYSADM.TRG_BI_B'
SQL> select * from a;
NAME
Pan
SQL> select * from b;
NAME
pan
Pan
pAn
PAN
paN
SQL> You have to create same one for update.
Nicolas.

Similar Messages

  • Blank padding in case of nchar columns while case insensitive comparison

    hi
    i have my database on oracle 9i .
    i want case insensitive behaviour so i set nls_comp=ANSi and nls_sort to GENERIC_BASELETTER.
    all columns of type character are nchar in my database.
    but when i execute a query having a where condition on nchar column blanks are not padded and there is no result ( documentation says lanks are padded while comparisons)..
    for e.g select * from area where code='bom' does not return result.
    i need to do select * from area where rtrim(code) = 'bom'. (note code is of length nchar(10))
    please suggest if here is any solutions for this.

    It's always helpful when you have problems if you can provide a concrete example of those problems. For example can you provide something like the following the exhibits the problem?
    SQL> SELECT * FROM V$VERSION;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE    10.2.0.4.0      Production
    TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    SQL> CREATE TABLE AREA(CODE NCHAR(10));
    Table created.
    SQL> INSERT INTO AREA VALUES ('bom       ');
    1 row created.
    SQL> SELECT * FROM AREA WHERE CODE = 'bom';
    CODE
    bom
    SQL> SHOW PARAMETER NLS_COMP
    NAME                                 TYPE        VALUE
    nls_comp                             string
    SQL> SHOW PARAMETER NLS_SORT
    NAME                                 TYPE        VALUE
    nls_sort                             string
    SQL> ALTER SESSION SET NLS_COMP=ANSI;
    Session altered.
    SQL> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;
    Session altered.
    SQL> SELECT * FROM AREA WHERE CODE = 'bom';
    CODE
    bom

  • How do I make Merge operation into the target table case insensitive?

    Hi All,
    We have a target table that has a varchar 2 column called nat_key and a map that copies over data from a source table into the target table.
    Based on wheteher the values in the nat_key column matches between the source and the target, an update or an insert has to be done into the target table.
    Let us say target table T has the following row
    nat_key
    EQUIPMENT
    Now, my source table has the same in a different case
    nat_key
    equipment
    I want these rows to be merged .
    In the OWB map, I have given the property of nat_key column in the target table as 'Match while updating' = 'Yes'. Is there a built in feature in OWB, using which I can make this match as case insensitive?
    Basically, I want to make OWB generate my mapping code as
    if UPPER(target. nat_key)=upper(source.nat_key) then update...else insert.
    Note: There is a workaround with 'Alter Session set nls_sort=binary_ci and nls_comp=linguistic', but this involves calling a pre-mapping operator to set these session parameters.
    Could anyone tell me if there is a simpler way?

    Hi,
    use an expression operator to get nat_key in upper case. Then use this value for the MERGE. Then nat_key will only be stored in upper case in your target table.
    If you have historic data in the target table you have to update nat_key to upper case. This has to be done only once and is not necessary if you start with an empty target table.
    Regards,
    Carsten.

  • Database got halted while inserting rows

    I have a 9i database running on solaris not restarted for 15 days.It just got halted or hanged while inserting rows in a table.When restarted everything is just fine and those rows have been inserted in no time!!What might be the reason?Dont tell me 'lock' because I have already checked for ora:60 error in alertlog.Would you please give some direction to drill it down .

    Did you met the problem , only when you inserting the rows ? Or is there something else which leads this situation ? most of the occasion when
    you found your database halt is because of your archivelogs . I would
    still like to know if you running your db in archivelog mode ? It also be the
    case that you set archive_log_start = true in the pfile and diden't fire
    alter database archivelog at the sql prompt .
    Hare Krishna
    Alok

  • ORA-00600: internal error code while inserting data in table

    hi gems..
    i am getting the below error while inserting data in a table...
    *ORA-00600: internal error code, arguments: [kqd-objerror$ ] , , [0], [98], [BIN$sm1O+fYhF1jgRAAhKNYyZA==$0], [], [], [], [], [], [], []*
    i can select the table absolutely but cant insert datas(but this is the schema owner and so datas should get inserted)
    i have checked the alert.log...the entries in last few lines are like this:
    <msg time='2011-11-25T03:08:55.763+05:30' org_id='oracle' comp_id='clients'
    type='UNKNOWN' level='16' host_id='ICS167DOR'
    host_addr='10.184.134.139'>
    <txt>Directory does not exist for read/write [oracle/ora11g/app/ora11g/product/11.2.0/dbhome_1/log] [oracle/ora11g/app/ora11g/product/11.2.0/dbhome_1/log/diag/clients]
    </txt>
    </msg>
    please help...thanks in advance
    Edited by: user12780416 on Nov 25, 2011 3:29 AM

    hi...
    finally i got the solution...i know that this problem may occur due to some other reasons also for different users...but the problem which caused the developers facing the error in this case is below:
    they faced the error while importing the dumps in the server. at the same time the application developers told that they can select the tables but cannot insert any datas.
    after listenning to this, i assumed that this may be a space problem with the system tablespace as it is responsible for storing the data dictionary.
    i asked for the free spaces for the system tablespace and got the reason. It has only 0.2% left.
    i told them to issue the resize command for the system01.dbf datafile(allocated 2GB more) and the problem got resolved.
    Hope this helps..thanks

  • Case insensitive search in select statement

    Hi Experts,
      I have entries in table as mixed case. For example i am searching on an attribute called description in the table. I want the serch to be case insensitive for that attribute. Because in table it is i.e. JUMBO Pack and in the search attribute it is i.e. Jumbo Pack.
    I do not want to translate both to the same case and search. Is there an option?
    Best Regards!
    Sandip

    Hi Sandip,
    One more alternative:
    If ztext is ur original field which is saving the mixed text.
    Append one extra field(ztext_upper) to the table.
    Now if " Sap Sdn" is the text we are saving then
    While saving the entires to the table,
    1. asusual save the value(" Sap Sdn") to teh original field(ztext)
    2. translate the value to upper case(SAP SDN) and save this entry to teh newly appended field(ztext_upper)
    Now while doing search, translate to upper case and compare with the value in ztext_upper. If it satisfies then for display options select the original value from the field (ztext) which is corresponding to the satisfied ztext_upper field.
    Regards,
    Swarna Munukoti.

  • Case insensitive search in SE16

    Hello Community,
    We have a Z table which contains the field "filename," containing both upper & lowercase alphanumeric values. 
    I was surprised to find that it is not so easy to perform a case insensitive search against those field values using SE16.
    It would be perfect if:
       1. a search in SE16 for `file.txt` will find the results of all records related to the file "file.txt"
       2. a search in SE16 for `FiLe.TxT` will also find all records related to the file "file.txt"
    Can someone help me to accomplish this ?
    Thanks!
    Keith Helfrich

    Hi everyone,
    The goal is to perform a case insensitive search in SE16.  Is there no way to do this ?
    While there are a variety of work-arounds, for example : it is possible to store all the values in the table in UPPERCASE, these work-arounds do not solve our problem. 
    The values in the table need to be stored with the accurate case, exactly as the file is named at the UNIX level.  Since UNIX is also case sensitive, we need to be accurate with the case when storing statistics data about the files. 
    Yet, when searching in SE16, it is problematic because we don't always know the correct case.  For that reason, a case insensitive search is required.
    This seems to be a very basic function that I am surprised SAP doesn't provide...

  • Case insensitive search working in dev but not in prod

    Hello All,
    I had set the CASE_SENSITIVE_CHARACTER_COMPARISON parameter as OFF in NQSConfig.ini file for enabling the case insensitive search in OBIEE.
    This setup is letting me do the case insensitive search in Dev env but the same doesnt work in prod env. I tried pointing both prod and dev rpd to same prod db.
    With same db also, case insensitive search doesnt work in prod env.
    Any idea for which other configuration I can look for.
    Thanks in advance.

    Thanks Stijin. I had seen this post earlier. Case insensitive search works fine after setting the value for NLS_SORT and NLS_COMP in production RPD but the other report with distinct clause starts failing. Not sure about the reason.
    Saw this comment from you in that post:
    The only compromise solution we could find was to "cache" the column value we wanted to use in insensitive searches. These were mainly used in "show all choices" while setting prompts. Other than that there isn't much you can do in an Oracle database.
    Can you please tell me how to implement the above.

  • SELECT INTO doing case insensitive query?

    Hi all,
    I'm having a problem with a query acting as if it is case-insensitive when I do a "SELECT table.x INTO variable ...". If I do the same query, without the "INTO variable", I get one result, as expected.
    The query is similar to the following:
    SELECT table_id INTO variable FROM table WHERE table.varchar2column = 'name' AND table.integercolumn = int_variable;
    There is a unique constraint forcing the varchar2column / integercolumn values to be unique.
    If the varchar2column has two entries that differ only in case, a regular select statement returns one result. However, in the stored procedure using the INTO, I get the following error message:
    ORA-01422: exact fetch returns more than requested number of rows
    It does not get that if I remove the entry that differs only in letter-case. This is Oracle 10.2.0.1.0, if that matters.
    I need this query to be case sensitive. I'm not a DB expert, I'm just a developer trying to fix a problem. I attempted to run "ALTER session SET nls_sort = binary" in the stored procedure, but I guess I can't do that...
    Any suggestions would be appreciated.

    791307 wrote:
    SELECT table_id INTO variable FROM table WHERE table.varchar2column = 'name' AND table.integercolumn = int_variable;
    ...When you say, "...AND table.integercolumn = int_variable;" What is the name of int_variable? Does that name match some column name? Could you post the table creats and a complete sample PL/SQL block with your issue?
    One of the things that gets me every once in awhile is having a variable name that matches a column name. In that case the column name is used inside the select statement, not the variable. To avoid that issue, I use v_ for all my variables. (Others have different standard prefixes.)
    I only point this out, because it might be given results that look case insensitive on the varchar2 column, but is really an issue with the integer column matching to a variable:
    SQL> drop table T;
    Table dropped.
    SQL> create table T (id number constraint T_PK primary key
      2      , Varchar2Data varchar2(20)
      3      , NumberData number(38)
      4      , constraint T_UK1 unique (Varchar2Data, NumberData)
      5  );
    Table created.
    SQL> insert into T values (1, 'STRING', 100);
    1 row created.
    SQL> insert into T values (2, 'string', 200);
    1 row created.
    SQL> insert into T values (3, 'STRING', 300);
    1 row created.
    SQL> select * from T where Varchar2Data = 'STRING' and NumberData = 100;
            ID VARCHAR2DATA         NUMBERDATA
             1 STRING                      100
    SQL> declare
      2      NumberData number(38);
      3      Id Number;
      4  begin
      5      NumberData := 100;
      6      select Id into Id
      7      from T
      8      where T.Varchar2Data = 'STRING'
      9      and T.NumberData = NumberData;
    10      DBMS_OUTPUT.PUT_LINE(Id);
    11  end;
    12  /
    declare
    ERROR at line 1:
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at line 6
    SQL> declare
      2      v_NumberData number(38);
      3      v_Id Number;
      4  begin
      5      v_NumberData := 100;
      6      select Id into v_Id
      7      from T
      8      where T.Varchar2Data = 'STRING'
      9      and T.NumberData = v_NumberData;
    10      DBMS_OUTPUT.PUT_LINE(v_Id);
    11  end;
    12  /
    1
    PL/SQL procedure successfully completed.
    SQL>

  • Use of wildcard and case insensitive searches

    Used the "Create form from a table" option. Have a customized form for this table to query, insert, update, and delete rows. My question is how can I allow a user to 1) search using a wildcard (%) from this form and 2) how can I make the search case insensitive for my users.
    Thanks

    Hi,
    Why not create a report to find the records and link to the form from the report.
    You can then set the where clause to be whatever you wish:
    where tablename.columnname like :parameter
    or even:
    where UPPER(tablename.columnname) like UPPER(:parameter)
    Regards Michael

  • Case insensitive selects with 'like'

    I use a 10g database (10.2.0.2 same behaviour with 10.2.0.1). What we want is case insensitive selects with 'like' operator in the where clause. NLS_COMP is set to 'LINGUISTIC' and NLS_SORT is set to 'BINARY_CI.
    In a table we have two columns one of type 'varchar2' one of type 'nvarchar2'. The databases national character set is set to UTF8. Case insensitive sorting works with both columns. Select statements with '.... where varchar2col like '%r%' returns also values with upper case 'R' values (that is what I expect).
    The select statements with '.... where nvarchar2col like '%r%' however does not return the row with upper case 'R' values.
    I used SQL*Plus: Release 10.2.0.3.0 and other clients and the behaviour is the same so
    I think it is not client related.
    Is that a known issue or is there any other parameter to set for UTF8 nvarchar columns?
    Any hint is very much appreciated! Here are the nls settings in database, instance and session:
    DPARAMETER      DVALUE IVALUE SVALUE
    NLS_CHARACTERSET WE8ISO8859P1
    NLS_COMP      BINARY LINGUISTIC LINGUISTIC
    NLS_LANGUAGE      AMERICAN AMERICAN AMERICAN
    NLS_NCHAR_CHARACTERSET UTF8
    NLS_RDBMS_VERSION 10.2.0.1.0
    NLS_SORT BINARY BINARY_CI BINARY_CI
    NLS_TERRITORY      AMERICA AMERICA AMERICA

    OK. Found out what the problem is. It is obviously the client.
    While using the instant client and setting the parameters (NLS_SORT=BINARY_CI and NLS_COMP=LINGUISTIC) as environment variables does not work correctly, at least not for nvarchar2 fields. The nls_session_parameters show the correct values, but selects with 'like' operators in the where clause do not return case insensitive. Issuing the 'alter session' commands and again setting the nls parameters solves the problem.
    Using the full client installation also works, in case the parameters are set in the registry on windows systems. With the full client it it not necessary to issue the 'alter session' commands again.
    So obviously the problem is instant client and nvarchar2 field related. That's too bad....

  • Case-insensitive Search with Search Form

    I am using a Search Form with a UIX Page. One of the issue that need to be resolved is to be able to do case-insensitive search for text information stored in some database columns. Please advise me how to implement case_insensitive search with JDeveloper's Search Form.
    Thanks in advance,

    Hi Qian,
    This article (below) by Steve Muench explains how you can customize Query by example behaviour of ADF BCs and if you really want, how to create your own ViewCriteriaAdapter (but you don't have to go quite that far - luckily :) ).
    http://radio.weblogs.com/0118231/2005/02/10.html#a492
    Here is what I did. I implemented the following method in my base view object class (MyBaseViewObject). Note that this code is based on a piece of code that Steve posted on his blog (http://radio.weblogs.com/0118231/stories/2003/07/11/implementingAViewCriteriaAdapterToCustomizeQueryByExampleFunctionality.html); originally an example about creating your own ViewCriteriaAdapter.
    Since applyViewCriteria(oracle.jbo.ViewCriteria) is used by the query-by-example mechanism you're able to "intercept" the ViewCriteria on "it's way in". After that the standard ViewCriteria does it's job as ususal and generated the where clause when required.
    public void applyViewCriteria(ViewCriteria vc)
         if( null == vc || vc.size() == 0 ) super.applyViewCriteria(vc);
         ViewCriteriaRow criteriaRow = (ViewCriteriaRow)vc.first();
         StructureDef def = criteriaRow.getStructureDef();
         AttributeDef[] attrs = def.getAttributeDefs();
         System.out.println(getClass().getName() + ": applyViewCriteria()");
         boolean bFirst = true;
         do{
           if(vc.hasNext() && !bFirst) criteriaRow = (ViewCriteriaRow)vc.next();
           criteriaRow.setUpperColumns(true);
           for (int j = 0, attrCt = attrs.length; j < attrCt; j++)
             String criteriaAttrVal = ((String)criteriaRow.getAttribute(j));
             if (criteriaAttrVal != null && !criteriaAttrVal.equals("") && !JboTypeMap.isNumericType(attrs[j].getSQLType()))
              criteriaRow.setAttribute(j,criteriaAttrVal.toUpperCase());
           bFirst=false;
         }while(vc.hasNext());
         super.applyViewCriteria(vc);
    NOTE that doing this makes all your views case insensitive (to vc search) you may want to implement more functionality in your base view object to set whether a view is in case insensitive mode or not.
    ALSO that flag will not be passivated (if I remember correctly - someone correct me if I'm wrong) so you'll have to add that flag to the passivated data.
    Cheers!
    Sacha

  • Sorting Column - Case Insensitive but Lower should be first

    Hi all,
    Lets assume we have am EMployee table :
    create table Emp (Empname varchar2(20));
    It has following records :
    Insert into EMP (EMPNAME) values ('A');
    Insert into EMP (EMPNAME) values ('a');
    Insert into EMP (EMPNAME) values ('b');
    Insert into EMP (EMPNAME) values ('c');
    Insert into EMP (EMPNAME) values ('D');
    Insert into EMP (EMPNAME) values ('e');
    Insert into EMP (EMPNAME) values ('E');
    Insert into EMP (EMPNAME) values ('F');
    i.e
    Empname
    A
    a
    b
    c
    D
    e
    E
    F
    I need output as below : ( Sort by Ascending, case insensitive meaning I don't want all Capital first and then Lower letters. The results should be in alphabetical order it shouldn't matter whether its capital or small. More important is that small letter should come first then the Capital letter). Is this possible?.
    Empname
    a
    A
    b
    c
    D
    e
    E
    F
    Select * from emp order by Lower(empname) Asc;
    Doesn't do the job, because 'A' comes before 'a'.
    Regards,
    Bhaskar

    select empname from emp order by upper(empname),ascii(empname) desc;
    EMPNAME
    a
    A
    b
    c
    D
    e
    E
    F
    Cheers,
    Manik.

  • Case insensitive searching for criteria "All metadata"

    If I'm specifically searching in (for example) keywords, then the search is case insensitive. However, if I'm searching "All metadata" then the search is case sensitive. I don't know if this is a bug or a feature (seems like a bug to me), but I'd really prefer it to remain case insensitive for this search criterion as well.
    While I'm at it, I'd like to be able to search the IPTC headline.
    Bart

    I'll second that request on both counts! In fact, I'd like to see the ability to search based on any XMP field.
    -Andrew

  • Case insensitive highlighting

    I have a report region with a search field. I am using the builtin highlight feature, which works as expected. But what I like to achieve is to highlight all occurences of my specified search word regardless of its case!
    That means if I search for example for
    "joe"
    I'd like
    JOE,Joe,JoE, etc
    to be highlighted as well.
    Is there any way to accomplish this?
    Regards, Michael

    Thanks Vikas for your time answering.
    But in my scenario it is still not working as I wish. This is due to the fact that I actually use the procedure wwv_flow_disp_page_plugs.display_report for grabbing the output of a report region with which I replace a DIV element.
    I know that wwv_flow_disp_page_plugs.display_report is undocumented and unsupported, but ...what the heck ....it works like a charm, except well ..eh ... for case insensitive highlighting ;)
    So the procedure is as follows:
    1) create a text item
    2) create a report region with condition "DISPLAY NEVER" and fill all required attributes including highlight. Grab the region_id from the source!
    3) create an application process with above mentioned procedure wwv_flow_disp_page_plugs.display_report and parametrize it with your region_id
    4) create a html region with a DIV element and some javascript code with htmldb_get to call the application process and replace the DIV with the result from htmldb_get
    Unfortunately I can't demonstrate the steps on apex.com because one needs a grant on wwv_flow_disp_page_plugs.display_report to make it work!
    The reason for going this way is the enormous amount of flexibility in layouting and styling your whole webpage, while still being very perfomant managing your "plugs" AJAX-like.
    So to come back to my original question, either I made some mistake somewhere or wwv_flow_disp_page_plugs.display_report does not the full highlighting story.
    Maybe there is even an supported API which accopmlishes the same thing: grabbing only the report regions output (which only is a HTML Table at the end of the day)?
    I know of How to display region from one page on the other page?
    but Page 0 is not an option since again I cannot grab solely a reports output :(
    any help, comments are really appreciated
    Michael

Maybe you are looking for