Adding a constraint to an attributes of an existing object

Hi ,
I need to to add a CHECK constraint into a user defined object. This object exists already and used in a table , I cannot find the correct syntax to add the CHECK constraint to one of the attributes of the object.
I have added the following, a NOT NULL constraint to it without any errors.
ALTER TYPE USER_OBJ
MODIFY ATTRIBUTE (ATTRB_A VARCHAR2(30) NOT NULL)
CASCADE;
But when I try and do the same with a CHECK (IN ) constraint I keep getting errors stating wrong syntax or expecting an operator.
I have searched and just cannot find if what I am attempting is possible or not in Oracle 9i - Is it and if it is how does one do it ?
Thanks for any assistance in this
Regards
Eoin

If you read the documentation you will see that Oracle does not support constraints and defaults in type specifications. I think the fact that the ALTER TYPE statement works is a bug.
Consider what happens when we try to create a type with a NOT NULL attribute...
SQL> CREATE TYPE  user_obj AS OBJECT (attrb_a VARCHAR2(30) NOT NULL)
  2  /
Warning: Type created with compilation errors.
SQL> show error
Errors for TYPE USER_OBJ:
LINE/COL ERROR
1/27     PLS-00218: a variable declared NOT NULL must have an
         initialization assignmentHmmm, can't do that. So let's go down the ALTER route...
SQL> CREATE OR REPLACE TYPE  user_obj AS OBJECT (attrb_a VARCHAR2(30) )
  2  /
Type created.
SQL> ALTER  TYPE user_obj
  2     MODIFY ATTRIBUTE (ATTRB_A  NOT NULL)
  3  /
ALTER  TYPE user_obj
ERROR at line 1:
ORA-06545: PL/SQL: compilation error - compilation aborted
ORA-06550: line 3, column 31:
PLS-00103: Encountered the symbol "NOT" when expecting one of the following:
<an identifier> <a double-quoted delimited-identifier> LONG_
double ref char time timestamp interval date binary national
character nchar
The symbol "<an identifier>" was substituted for "NOT" to continue.
ORA-06550: line 0, column 0:
PLS-00565: USER_OBJ must be completed as a potential REF target (object type)
SQL>  ALTER  TYPE user_obj
  2      MODIFY ATTRIBUTE (ATTRB_A  VARCHAR2(30)  NOT NULL)
  3  /
ALTER  TYPE user_obj
ERROR at line 1:
ORA-22324: altered type has compilation errors
ORA-22328: object "APC"."USER_OBJ" has errors.
PLS-00719: only widening of attribute 'ATTRB_A' constraints is allowed
ORA-06550: line 0, column 0:
PL/SQL: Compilation unit analysis terminated
SQL>  ALTER  TYPE user_obj     MODIFY ATTRIBUTE (ATTRB_A  VARCHAR2(31)  NOT NULL)
  2  /
Type altered.Anything with so wacky a syntax just cannot be correct. Was the effort worth while?
SQL> declare
  2   u user_obj;
  3  begin
  4   u := USER_OBJ('APC');
  5  end;
  6  /
PL/SQL procedure successfully completed.
SQL> declare
  2   u user_obj;
  3  begin
  4   u := USER_OBJ(NULL);
  5  end;
  6  /
PL/SQL procedure successfully completed.
SQL> desc user_obj
Name                                      Null?    Type
ATTRB_A                                            VARCHAR2(31)
SQL> That'll be a "No" then.
Cheers, APC

Similar Messages

  • How can I use database constraints in entity attribute validation rules

    I am interested in using database constraints to validate attributes in entity objects.
    I would like to implement a JboValidatorInterface in a way that I can use an operator like "GreaterOrEqualTo" to compare with values retrieved from the database for a column associated with an entity object attribute.
    I have used this pattern with success in other environments, where the user community decides the minimum value for a thing should change from x to y, and simply changing a database object also changes the validation methods of all applications which access it.
    I am not certain that column constraints are the appropriate vehicle, but so far that seems to be the case.
    I see that you can create a validation rule which makes comparisons against a view object attribute. I am wondering if there is a generic way to use standardized names for column constraints along with ADF hooks into properties of database columns, to avoid writing individual queries for each attribute.
    Thanks in advance!!!

    Jeffrey,
    If you already have constraints on the underlying tables, why do you need to validate them in ADF BC? You can certainly use some framework extension classes to give the user nicely formatted error messages - see ER: ADF BC - allow custom error msgs for common exceptions (e.g. DML) for more details.
    I am using this method so that anything that is enforced in the database (check constraints, foreign keys, unique constraints, etc) are not enforced in the ADF BC layer as well - after all, there's more than one way to get data into a table, and DB constraints ensure that even if data gets in through another mechanism (apart from the ADF application), it is valid. My 2 cents, of course.
    Hope this helps,
    John

  • Adding field as a nevigation attribute

    Hello Experts,
    I have modified a DSO to add one field Trading Business Area (0PBUS_AREA)  in the key fields part.
    Q.1 Can 0PBUS_AREA be navigation attribute of 0BUS_Area.
    Q2. Adding 0PBUS_AREA in the navigation attribute of 0BUS_AREA and removing it from Key fields part will make any difference in the output?
    Regards,
    Nirav Shah

    Hi Allen/ Beekay,
    Thanx for your reply.
    In some of the line items loaded from R/3 to BI, 0PBUS_Area is maintained, so removing it from key field causes lose of some data.
    0Bus_Area is already a key field of that DSO. so if i make 0PBUS_Area as a navigation attribute, still it works like a key field as the corrosponding main field is still available in the key fields of DSO.
    Regards,
    Nirav
    Edited by: Nirav Shah on Aug 10, 2008 9:51 AM

  • [Q] htmlKona - adding attributes not specified in object model

    How do I go about adding attributes to a htmlKona object that exist in
              proprietary HTML versions, or versions beyond what is supported in Kona, if
              those add methods do not exist in the current object model?
              Most htmlKona elements extend weblogic.html.ElementWithAttributes, but the
              addAttribute(String, String) method is inexcessable.
              Any help appreciated. If this is posted to the wrong group, please point me
              in the right direction.
              Lukas
              

    I guess you need to get htmlkonapatch403Patch.jar. ElementsWithAttributes
              supports it then.
              Madhavi
              Lukas Bradley <[email protected]> wrote in message
              news:[email protected]...
              > import weblogic.html.TableElement ;
              >
              > class TableTest
              > {
              > public static void main(String args[])
              > {
              > TableElement lTable = new TableElement() ;
              > lTable.addAttribute("height", "100%") ;
              > }
              > }
              >
              > Yields:
              >
              > TableTest.java:8: Method addAttribute(java.lang.String, java.lang.String)
              > not found in class weblogic.html.TableElement.
              > lTable.addAttribute("height", "100%") ;
              > ^
              > 1 error
              >
              > While the documentation states:
              >
              > java.lang.Object
              > |
              > +----weblogic.html.HtmlElement
              > |
              > +----weblogic.html.ElementWithAttributes
              > |
              > +----weblogic.html.MultiPartElement
              > |
              > +----weblogic.html.TableElement
              >
              >
              > And ElementWithAttributes has:
              >
              > addAttribute(String, String)
              >
              > And yes, many browsers will allow you to set the height on a table. =)
              > Thanks for any help.
              >
              > Lukas
              >
              >
              >
              > John Greene wrote in message <[email protected]>...
              > >
              > >Hi --
              > >
              > >A method was added to allow generic attributes. I thought it was this
              > method
              > >you speak of. How do you mean it's inaccessible? Newsdude, can you
              > clarify?
              > >
              > >
              > >Lukas Bradley wrote:
              > >>
              > >> How do I go about adding attributes to a htmlKona object that exist in
              > >> proprietary HTML versions, or versions beyond what is supported in
              Kona,
              > if
              > >> those add methods do not exist in the current object model?
              > >>
              > >> Most htmlKona elements extend weblogic.html.ElementWithAttributes, but
              > the
              > >> addAttribute(String, String) method is inexcessable.
              > >>
              > >> Any help appreciated. If this is posted to the wrong group, please
              point
              > me
              > >> in the right direction.
              > >>
              > >> Lukas
              > >
              > >--
              > >
              > >Take care,
              > >
              > >-jg
              > >
              > >John Greene E-Commerce Server Division, BEA Systems,
              > Inc.
              > >Developer Relations Engineer 550 California Street, 10th floor
              > >415.364.4559 San Francisco, CA 94104-1006
              > >mailto:[email protected] http://weblogic.beasys.com
              >
              >
              >
              >
              

  • How to get attribute value from an object inside an object in Xpress

    Does anyone know how to get an attribute value from an object in Xpress in a workflow? I have an object structured as follows:
    <ResourceInfo accountId='mj628' tempId='3483372b787ce7dd:-5d99a0c5:130cb238483:-3600'>
    <ObjectRef type='Resource' name='Google Apps'/>
    </ResourceInfo>
    I need if possible to get the name='Google Apps', which is inside the ObjectRef, so I guess its an attribute value of an object inside an object.

    If the ResourceInfo object is accessible in a variable, i.e. named "myResInfo", you just have to check the Java API and call the relevant method:
    <invoke name='getResourceName'>
      <ref>myResInfo</ref>
    </invoke>

  • How to reference the Parent view Object attribute in Child View object

    Hi , I have the requirememt to generate Tree like struture to display Salary from joining date to retirement date in yearly form.I have writtent two Pl/SQL function to return parent node and child nodes(based on selected year).
    1.First function --> Input paramter (employee id, retirement date , joining date) --> return parent node row with start_date and end_date
    2. 2nd function --> input paarmter(employee id, startDate, end_date) --> return child node based on selected parent node i.e. start date and end date
    I have created two ADF view object based on two function return
    Parent Node --> select * from Table( EUPS.FN_GET_CONTR_SAL_BY_YR(employeeId,retirement Date, dateOf joining)) ;
    Child Node --> select * FROM TABLE( EUPS.FN_GET_CONTR_SAL_FOR_YEAR( employeId,startDate, endDate) ) based on selected parent node.
    I am giving binding variable as input for 2nd function (child node) . I don't know how to reference the binding variable value in child view from parent view.
    Like I have to refernce employeId,startDate, endDate values in 2nd function from parent view object. some thing like parentNode.selectedStart_date parentNode.employeeId.
    I know we can achive this writing the code in backing bean.But i want to know how can we refernce parent view object attribute values in child view object using Groovy or otherway?
    I will appreciate your help.
    Thanks

    I have two view com.ContractualSalaryByYearlyView for Parent Node and com.ContractualSalaryByYearlyView for child Node.
    I have created view link(ContractualSalYearlyByYearViewLink) betweem two view by giving common field empId, stDate , endDate.(below is the view link xml file).
    I tried give the binding attribute values using parent object reference like below in com.ContractualSalaryByYearlyView xml file but getting error
    Variable ContractualSalaryByYearlyView not recognized.I think i am using groovy expression.
    Thanks for quick response.
    com.ContractualSalaryByYearlyView xml
    <ViewObject
    <DesignTime>
    <Attr Name="_isExpertMode" Value="true"/>
    </DesignTime>
    <Variable
    Name="empId"
    Kind="where"
    Type="java.lang.Integer">
    <TransientExpression><![CDATA[adf.object.ContractualSalaryByYearlyView.EmpId]]></TransientExpression>
    </Variable>
    ContractualSalYearlyByYearViewLink.xml file
    <ViewLinkDefEnd
    Name="ContractualSalaryByYearlyView"
    Cardinality="1"
    Owner="com.ContractualSalaryByYearlyView"
    Source="true">
    <DesignTime>
    <Attr Name="_finderName" Value="ContractualSalaryByYearlyView"/>
    <Attr Name="_isUpdateable" Value="true"/>
    </DesignTime>
    <AttrArray Name="Attributes">
    <Item
    Value="com.ContractualSalaryByYearlyView.EmpId"/>
    <Item
    Value="com.ContractualSalaryByYearlyView.StDate"/>
    <Item
    Value="com.ContractualSalaryByYearlyView.EndDate"/>
    </AttrArray>
    </ViewLinkDefEnd>
    <ViewLinkDefEnd
    Name="ContractualSalaryForYearView"
    Cardinality="-1"
    Owner="com.ContractualSalaryForYearView">
    <DesignTime>
    <Attr Name="_finderName" Value="ContractualSalaryForYearView"/>
    <Attr Name="_isUpdateable" Value="true"/>
    </DesignTime>
    <AttrArray Name="Attributes">
    <Item
    Value="com.ContractualSalaryForYearView.EmpId"/>
    <Item
    Value="com.ContractualSalaryForYearView.StDate"/>
    <Item
    Value="com.ContractualSalaryForYearView.EndDate"/>
    </AttrArray>
    </ViewLinkDefEnd>

  • CProjects - Adding a new field to the detail screen of object link

    Hi All,
    I've a requirement of adding a new field to the detail screen of object link. But the field is a combination of 3 other standard fields.
    Please let me know how could i realise this functionality?
    Thanks in advance.

    Hi Srini,
    Thanks for your Reply
    I have kept 01 against the field BSEG-AUGDT and selected the preselect check box also.
    But still that field is not visible in the dynamic selection screen.
    Thanks
    Ajay.D

  • Unable to update this object because the following attributes associated with this object have values that may already be associated with another object in your local directory services

    Getting this error from DirSync
    Unable to update this object because the following attributes associated with this object have values that may already be associated with another object in your local directory services: [UserPrincipalName
    [email protected];].  Correct or remove the duplicate values in your local directory.  Please refer to
    http://support.microsoft.com/kb/2647098 for more information on identifying objects with duplicate attribute values.
    Quick eyeball and couldn't see the cause in the user account so used the script here:
    http://gallery.technet.microsoft.com/office/Fix-Duplicate-User-d92215ef
    And got these outputs:
    PS C:\Windows\System32\WindowsPowerShell\v1.0> Export-OSCADUserPrincipalName -UserPrincipalName "[email protected]" -Path .\outputs.csv
    WARNING: Cannot find objects with specified duplicate user principal name
    [email protected]
    Found 0 user(s) with duplicate user principal name.
    Where to from here?
    Richard P

    Hi,
    Did you talk about the Microsoft Azure Active Directory Sync tool ?
    If yes, this issue occurs if one or more of the following conditions are true:
    An object in the on-premises Active Directory has an SMTP address that's the same as the SMTP address of the object that's reporting the problem.
    An object in the on-premises Active Directory has a mail attribute that's identical to the object that's reporting the problem.
    An object already exists in your organizational account and has the same SMTP address or mail attribute as the object in the on-premises Active Directory
    More detail information, please refer to:
    http://support.microsoft.com/kb/2520976/en-us
    [Troubleshooting] Unable to update this object because the following attributes associated with this object
    http://blogs.technet.com/b/aadsyncsupport/archive/2014/05/20/troubleshooting-unable-to-update-this-object-because-the-following-attributes-associated-with-this-object.aspx
    Regards.
    Vivian Wang

  • Problem Instanciating BO - No default attribute defined for the object type

    Hello Experts,
    I am instanciating the BO BUS2038 to ZBUS2038 and when I click in u201Cto implementedu201D and follow u201Cto releasedu201D the message No default attribute defined for the object type is appearing!
    Can anybody help, please?

    Hello everyone,
    it appears to me, that no one has a clue about the "default attribute" and is widely guessing what can be done about that.
    I feel deeply sorry for that, Marcos.
    At first: You don't really need to care about the missing default attribute. If it's missing, the object's instance key will be used instead. Skip the warning message.
    Secondly: The default attribute is used to display the instance within the "Object links & Attachments" under the work item preview when using the SAP Business Workflow.
    Thirdly: You can select any existing attribute of your business object type to be the default attribute, by navigating to the "Basic data" (it's the heat-icon within the object builder), use tab "Defaults" and use the Input Help on the field "Attribute".
    There you'll go.
    Best wishes,
    Florin

  • How to make Transient Attribute Mandatory in View Object?

    Hi ,
    I have a Transient Attribute 'TransientFromCode' which is based on LOV .On UI ,I am showing this 'TransientFromCode' as 'SelectOneChoice' .
    So on selection of this i am populating other mandatory attributes.
    My requirement is to show this as 'Required' on UI but in View Object i am not able to find mandatory property for this attribute.
    I dont want to use required='true' . So can you plesae tell me is there any way to make Transient attibute as mandatory on UI .
    Thanks

    940637 - Your Use Case is a little vague\confusing.
    If you are just trying to get the standard "Required" architecture, it probably isn't working because you have incorrect syntax. It is #{bindings.MyViewObj.MyAttr.hints.mandatory}
    Yours: "#{bindings.UnitOfMeasureIntraClassConversion.hints.TransientItemDesc.mandatory}"
    It will "dynamically" pick this up at Runtime from the ViewObject Attributes "Mandatory" property (Attributes\Details tab), BUT the EL will always evaluate to "true" so this is the same functionally as just hard coding the UI component's Required property to "true" (although doing so is against Best Practices)
    If you are just wanting to SHOW the field as required without the standard Validation logic (because you are coding your own), you could:
    1) JUST set the UI component's "ShowRequired" property = true. This displays the * next to the Label (regardless of actual View Object Attr setting) but fires no validation.
    2) If you want to not show * but some custom standard, you could just create ANOTHER transient Attribute in the View Object and call it "TransientItemDescRequired" and set it to a Literal "y" or leave it blank and programmatically set it later... You can code your own validator\method\whatever against it, etc
    Edited by: donhoyt on Jul 5, 2012 7:58 AM

  • Script to modify the location attribute in an existing subnet registered on AD sites

    Could anyone help me to make an script to modify the location attribute in an existing subnet registered on AD sites and services.
    Using the script to create subnet, like this one below, occurs error because the subnet already exist:
     Set objRootDSE = GetObject("LDAP://RootDSE")
      strConfigurationNC = objRootDSE.Get("configurationNamingContext")
      strSiteObjectDN = strSiteObjectRDN & ",cn=Sites," & strConfigurationNC
      strSubnetsContainer = "LDAP://cn=Subnets,cn=Sites," & strConfigurationNC
      '-- Create Subnet --
      Set objSubnetsContainer = GetObject(strSubnetsContainer)
      Set objSubnet = objSubnetsContainer.***MODIFY/UPDATE***("subnet", strSubnetRDN)
      objSubnet.Put "siteObject", strSiteObjectDN
      objSubnet.Put "description", strDescription
      objSubnet.Put "location", strLocation
      objSubnet.SetInfo
    Thanks,

    Just get the subnet by name:
    subnet = "192.168.1.0\/24"
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strConfigurationNC = objRootDSE.Get("configurationNamingContext")
    strSiteObjectDN = strSiteObjectRDN & ",cn=Sites," & strConfigurationNC
    strSubnet = "LDAP://CN=" & subnet & ",cn=Subnets,cn=Sites," & strConfigurationNC
    Set objSubnet = GetObject(strSubnet)
    objSubnet.Put "description", strDescription
    objSubnet.Put "location", strLocation
    objSubnet.SetInfo
    ¯\_(ツ)_/¯

  • SSIS - "Violation of PRIMARY KEY constraint. Cannot insert duplicate key in object ' tablename '. The duplicate key value is 1234 . Though there are no duplicate records.

    Hi,
    I am providing support to one of our clients, where we have jobs scheduled to load the data from the tables in the source database to the destination database via SSIS packages. The first time load is a full load where we truncate all the tables in the destination
    and load them from the source tables. But from the next day, we perform the incremental load from source to destination, i.e., only modified records fetched using changed tracking concept will be loaded to the destination. After full load, if we run the incremental
    load, the job is failing with the error on one of the packages "Violation of PRIMARY KEY constraint. Cannot insert duplicate key in object '<tablename>'. The duplicate key value is <1234>, even though there are no duplicate records. When we
    try debugging and running the failing package, it runs successfully. We are not able to figure out why the package fails and when we run the next day it runs successfully. Request you to help me in this regard.
    Thank you,
    Bala Murali Krishna Medipally.

    Hi,
    I am providing support to one of our clients, where we have jobs scheduled to load the data from the tables in the source database to the destination database via SSIS packages. The first time load is a full load where we truncate all the tables in the destination
    and load them from the source tables. But from the next day, we perform the incremental load from source to destination, i.e., only modified records fetched using changed tracking concept will be loaded to the destination. After full load, if we run the incremental
    load, the job is failing with the error on one of the packages "Violation of PRIMARY KEY constraint. Cannot insert duplicate key in object '<tablename>'. The duplicate key value is <1234>, even though there are no duplicate records. When we
    try debugging and running the failing package, it runs successfully. We are not able to figure out why the package fails and when we run the next day it runs successfully. Request you to help me in this regard.
    Thank you,
    Bala Murali Krishna Medipally.
    I suspect you are trying to insert modified records instead of updating.

  • Attributes in a Serializable object in a file

    Hello,
    I have an application that stores a Serializable object into a file, but when I edit the file I can see the attributes from the stored object. And I thought that when you do that the stored data where bytes, instead of strings.
    Can somebody explain me how can I store an object into a file that cannot be shown the content?
    Here is my code:
    String fichero_datos = "D:\\workspace2\\Cliente\\Datos.dat"; //That is the file
    Cliente elCliente = new Cliente ("Fulanito"); //That is the object that stores a String
    FileOutputStream fo = new FileOutputStream(fichero_datos);
    ObjectOutputStream salida = new ObjectOutputStream(fo);
    salida.writeObject(elCliente);
    salida.flush();
    salida.close();
    fo.close();And the result file:
    �..sr..ClienteJB``}\..L. nombreq..Ljava/lang/String;L ..Fulanito
    I do not want the string �Fulanito� to be accesible by editing the file.
    Thanks a lot for your attention,
    - Susana

    And I thought that when you do that the stored data where bytes, instead of strings. When encoded as UTF-8, String are made up of bytes. You cannot assume that because bytes are used, that the file should be completely unreadable.
    You will have trouble editing the file in a text editor as the binary values will get changed and the the stream will appear to be corrupted.
    The only way to ensure the data is unmodifyable is to encrypt the data.
    If you want the data to be mearly unreadable, add a DeflatorOutputStream between the ObjectOutputStream and the FileOutputStream. This will compress the data and make it unreadbale unless you use an InflatorInputStream.

  • Programatically add / Rmove Attributes to a View Object

    I have a View Object with 2 attributes created at design time. I need to add more attributes to it at runtime based on some information I get. Is there a way to add/remove Attributes of the View Object programatically at runtime ?
    Any help is appreciated.

    add following method in your GridViewImpl class
    public void setDynamicColumns()
    for (int i=0;i<5;i++)
    this.addDynamicAttribute("Dynamic" + i);
    write this method in your moduleImpl
    protected void afterConnect()
    super.afterConnect();
    this.getYourGridView().setDynamicColumns();
    run your app
    Hope that helps
    Suvarna.

  • Add some more marketing attributes to an existing Business partner ( BP ).

    Hi...
    I need to add marketing attributes to an existing BP without deleting the previous ones.
    If i use CRM_MKTBP_ASSIGN_ATTRIBUT_TAB the old ones are get deleted.
    Please help me out.
    Regards,
    Swati

    Hi Swati,
    Can you try with FM CRM_MKTBP_ASSIGN_ATTRIBUT ?
    There fill the following parameters:
    IV_ATNAME = Characteristic attribute id
    IV_ATTRIBUTE_SET = Characteristic attribute set
    IV_ATWRT = Characteristic attribute value
    IT_PARTNER = Fill with partner GUID and Partner ID
    Leave the other parameters with default values.
    Hope that helps!
    Kind regards,
    Garcia

Maybe you are looking for

  • ABAP Report for IDOC data of perticular IDOC basic type

    Hi, I have requirment to create report to display the IDOC Data of the perticular IDOC type. However I believe in IDOC the data comes in raw format. Is there any standard TCODE wherein we can have IDOC data of perticular IDOC type. or Could you pleas

  • Problem with Reversed document with IDOC interface

    I have a problem when I create Idoc which will reverse a document. I use ACC_DOCUMENT_REVERSE, in Idoc is filled like this - OBJ_TYPE ( BKPFF ) OBJ_KEY( reverse document number + company code + year) OBJ_SYS ( system id ) OBJ_KEY_R ( obj_key of docum

  • IOS 6 - Change names in Contacts, won't reflect on text msg

    Is anyone else having this problem since updating? I change friends names in my Contacts to how I want them to appear, but my phone refuses to show them that way on text messages conversation for only a handful of people. For example, I have a friend

  • Web re-skill agent tool

    Dear All, Actually I have ICM7.2.7, and recently I checked the agent re-skill agent web tool in AW setup, I want to know what is the link I should insert in IE and how to login to change agent skill, is that with user list in Configuration Manager us

  • Acer Iconia Tab - touch screen glitch?!

    A couple years ago, my husband bought me a tablet for valentines. It worked great for a couple of months, then the touch screen started glitching. I could press an icon on one side of the screen and the tablet registers it on the complete opposite si