Validation of numeric value precision and scale
Hi all,
Iam using ADF with EJBs.
I have one inputText field that will accept numeric values (of java.lang.Double type). Due to database constraints I want to validate the input value on its precision and scale.
I put an f:convertNumber tag under the inputText and set the MaxIntegerDigits and MaxFractionDigits properties with the desired values.
I also set the ApplyValidation property of the corresponding attribute in the pagedef file. However no validation worked.
I made the same test with af:ConvertNumber with no result too.
I know that with BC4J it is easy to set such constraints at the entity level.
Is there any neat way to set validation or I need to write code in the backing bean?
<af:convertNumber> works fine for me. see the following code
<af:inputText id="it1">
<af:convertNumber type="number" minFractionDigits="2" maxIntegerDigits="4" maxFractionDigits="2"/>
</af:inputText>
Another possible solution with regular expression
<af:inputText id="it3" value="9999.99">
<af:validateRegExp pattern="\[0-9\]\[0-9\]\[0-9\]\[0-9\].\[0-9\]\[0-9\]"/>
</af:inputText>
regards
srini
Edited by: sangara on Jan 17, 2010 9:53 PM
Similar Messages
-
Precision and scale for numeric datatypes
Could be in XSU, could be in Oracle thin driver, but I'd expect the SAL column of the EMP table to include its precision and scale, e.g. 800.00 and not 800.
oracle: decribe EMP
NAME TYPE
SAL NUMBER(7,2)
sql server: sp_help EMP
Column_name Type Length Prec Scale
SAL numeric 5 7 2
sql server:
java myOracleXML getXML -conn "jdbc:inetdae7:aetius:1433?database=Northwind" -user "sa/sa" "select SAL from EMP where EMPNO > 7999"
<?xml version = '1.0'?>
<ROWSET>
<ROW num="1">
<SAL>800.00</SAL>
</ROW>
</ROWSET>
oracle:
java OracleXML getXML -user "scott/tiger" "select sal from
emp where empno > 7999"
<?xml version = '1.0'?>
<ROWSET>
<ROW num="1">
<SAL>800</SAL>
</ROW>
</ROWSET>
So who loses the scale in the Oracle case, the driver or XSU.
Steve.user4928701 wrote:
Specifying precision and scale in the datatype when creating a procedure does not work:
create or replace function SqlTxFunctionTesting(inparam in number(9,2)
Error(1,48): PLS-00103: Encountered the symbol "(" when expecting one of the following: := . ) , @ % default character The symbol ":=" was substituted for "(" to continue.
And one of the cons in the PL/SQL language in my view.
The language does not allow parameters to be declared in the fashion you are attempting to. Even declaring a subtype and using that, does not enforce either the precision or scale, on the parameter value passed.
Even worse - the parameter value can be a different data type all together from the defined parameter type - and a silent and implicit data type conversion will be done at run-time.
So you can expect run-time errors in your code unit caused by the caller passing invalid values, despite the compiler okaying the call from the caller to your code.
There are pros and cons to this approach. But if you are from a very strong type language environment like C or Pascal, you tend to see more cons than pros in this specific case. -
I am creating some application tables with APEX. When i define a column on my table for primary or foreign keys I select the NUMERIC datatype. The form then prompts me for Precision and Scale. What are the recommended values for precisions and scale for key columns? I understand that precision is the total number of digits before and after the radix but what is meant by scale - the number of digits after the radix? I'm a little rusty on these issues as it has been a long time since I used them.
Thanks, NedHi
Just to add to this (definitions spot on though as Paul pointed out)...
'NUMERIC' is not an Oracle datatype. The datatype is NUMBER. Oracle supports NUMERIC in a create statement but it is stored as NUMBER under the hood.
Using precision and scale definitions is not necessary, you can define number just on it's own and it will handle what you throw into it. The design consideration comes into exactly what you are going to use the field for.
I came across a situation where a company were creating their administration system (and this was a reasonably large company with some very important data) and had decided to use NUMBER(9) for the PK ID column on all their major tables. Sure enough, 10 years later this started to cause a problem cause the were running out of numbers! (okay, this is no big deal to fix but it's just an example). The reasoning had originally been because Oracle Forms defaulted the display field length to that in the data dictionary it would save them the effort of changing it manually every time they created a new form!
I generally define NUMBER as NUMBER unless there is a valid rule to say that it is and always be something that can be defined. For example monetary amounts - Japanese Yen can't have decimals so it should be held in a NUMBER (10,2) field (although lots of people do this for their 'amount' columns anyway). The data rules.
Cheers
Ben
http://www.munkyben.wordpress.com
Don't forget to mark replies helpful or correct ;)
Edited by: Munky on Aug 19, 2009 8:01 AM -
What is the point of Precision and Scale in Number Type?
Version :11.2
What is the point in having PRECISION and SCALE in number type? If you create the column with just NUMBER ie.without
specifying precision or scale , you can enter numbers with any precision and scale.
SQL> select * From v$version where rownum < 2;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> create table t1 (col1 number);
Table created.
SQL> insert into t1 values (223.9939394);
1 row created.
SQL> insert into t1 values (88.228384);
1 row created.
SQL> insert into t1 values (9.34);
1 row created.
SQL> insert into t1 values (000.00);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
COL1
223.993939
88.228384
9.34
0Did you ever have a business scenario where a Numerical column should store values only with a fixed precision and scale ?Omega3 wrote:
Version :11.2
What is the point in having PRECISION and SCALE in number type? If you create the column with just NUMBER ie.without
specifying precision or scale , you can enter numbers with any precision and scale.
SQL> select * From v$version where rownum < 2;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> create table t1 (col1 number);
Table created.
SQL> insert into t1 values (223.9939394);
1 row created.
SQL> insert into t1 values (88.228384);
1 row created.
SQL> insert into t1 values (9.34);
1 row created.
SQL> insert into t1 values (000.00);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
COL1
223.993939
88.228384
9.34
0Did you ever have a business scenario where a Numerical column should store values only with a fixed precision and scale ?Lots of business requirements for specific precisions and scales.
A persons Age may required to be stored as whole numbers of no more than 3 digits.
A sum of money may required to be stored with no more than 2 decimal places of accuracy e.g. GB Pounds and Pence or US Dollars and Cents
A unit of length may required to be stored in metres with 2 decimal places for centimetres
A shoe size may be required to be stored with one decimal place for half sizes
etc.
etc.
Yes, you may just create all of them as generic NUMBER datatype, but creating them with precision and scale can provide additional information about the limitations expected for the values stored, especially for things like reporting tools that may use the specified precision and scale to determine how to display the values automatically (by default).
If you start questioning "what's the point?" then you may as well say what's the point in having a NUMBER datatype when we can store numbers in a VARCHAR2 datatype? or what's the point in having a DATE datatype when we can stored dates as VARCHAR2 datatype? etc.
No point in asking such a question because there's almost always a point to these things (and if there isn't they get deprecated in later versions). -
How to specify precision and scale for a datatype in create procedure statement
Specifying precision and scale in the datatype when creating a procedure does not work:
create or replace function SqlTxFunctionTesting(inparam in number(9,2)
Error(1,48): PLS-00103: Encountered the symbol "(" when expecting one of the following: := . ) , @ % default character The symbol ":=" was substituted for "(" to continue.user4928701 wrote:
Specifying precision and scale in the datatype when creating a procedure does not work:
create or replace function SqlTxFunctionTesting(inparam in number(9,2)
Error(1,48): PLS-00103: Encountered the symbol "(" when expecting one of the following: := . ) , @ % default character The symbol ":=" was substituted for "(" to continue.
And one of the cons in the PL/SQL language in my view.
The language does not allow parameters to be declared in the fashion you are attempting to. Even declaring a subtype and using that, does not enforce either the precision or scale, on the parameter value passed.
Even worse - the parameter value can be a different data type all together from the defined parameter type - and a silent and implicit data type conversion will be done at run-time.
So you can expect run-time errors in your code unit caused by the caller passing invalid values, despite the compiler okaying the call from the caller to your code.
There are pros and cons to this approach. But if you are from a very strong type language environment like C or Pascal, you tend to see more cons than pros in this specific case. -
Can I know the precision and scale of a decimal field using ACEDAO?
Using ACEDAO in VC++, I am trying to retrieve the field details of an Access database (.accdb file) table of which one field is of decimal type. I am able to get the details using the functions of
DAO::_FieldPtr field;
as follows:
fieldName = field->GetName().GetBSTR();
nType = field->GetType() // returns DAO::dbDecimal
lSize = field->GetSize(); // returns 16
lAttr = field->GetAttributes(); // returns 0x000002H
nOrdinal = field->GetOrdinalPosition(); // returns 11
bAutoIncrement = ((lAttr & DAO::dbAutoIncrField) > 0);
DAO::PropertiesPtr props;
DAO::PropertyPtr prop;
int k, nProp;
std::wstring propName, propNames;
props = field->GetProperties();
if(props)
nProp = props->GetCount(); // returns 33
for(k = 0; k < nProp; k++)
prop = field->GetProperties()->GetItem((short) k);
if(prop)
propName = prop->GetName().GetBSTR();
propNames += propName;
propNames += L"\n";
// After exiting the loop, propNames contain 33 properties as:
// Value
// Attributes
// CollatingOrder
// Type
// Name
// OrdinalPosition
// Size
// SourceField
// SourceTable
// ValidateOnSet
// DataUpdatable
// ForeignName
// DefaultValue
// ValidationRule
// ValidationText
// Required
// AllowZeroLength
// AppendOnly
// Expression
// FieldSize
// OriginalValue
// VisibleValue
// GUID
// ColumnWidth
// ColumnOrder
// ColumnHidden
// Description
// DecimalPlaces
// DisplayControl
// TextAlign
// AggregateType
// ResultType
// CurrencyLCID
//But does not have any property named "Scale" or "Precision"
I could not find any function for retrieving the value for precision and scale for the decimal field.
Though I am able to retrieve the field value as a decimal number and get the required information from the structure, I think it is not the right way. Because, what will happen if the data for field is not available in the table?
Is there any other method to retrieve the precision and scale of a decimal type field using ACEDAO?
Thanks.I cannot find a method or property in ACEDAO to retrieve the precision and scale of a field. Maybe you could try get the number of a decimal type and use some mathematical methods to get the precision.
I find there are some way to get the precision by ADO or OLEDB.
For ADO way, you could check this thread:
https://social.msdn.microsoft.com/Forums/office/en-US/883087ba-2c25-4571-bd3c-706061466a11/how-can-i-programmatically-access-scale-property-of-a-decimal-data-type-field?forum=accessdev
For OLE DB , you could use IColumnsInfo::GetColumnInfo to get DBCOLUMNINFO::bPrecision.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms722704(v=vs.85).aspx
Also people in C++ may not familiar with access development, the
Access for Developers forum is good place for access develop issue. You could try there.
Hope this helps some.
Shu
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
Validation on numerical values in webdynpro
Hi Friends,
I am facing one probelem with validation on numerical values. In my application there is a scenario.. Input fields are Mibile number and email id.
when i enter the invalid phone number like : 09988wertyy it should throw the error like enter only numerical values.
In the same way i should validate the email id with format .. like ratnakar.alwala@ accenture.com. if it is in valid then it should throw the error.
could any body please give me the approach.
Thanks and Regards
Ratnakar reddy alwalaHi Ratnakar,
For number validation, what I did was :
1. Bind a context variable (Say Number) of type String to the input Field
2. At the time of submission, do the following
String num=wdContext.xurrentContextElement().getNumber();
if(num!=null)
try
double num=new Double(amnt.trim()).doubleValue();
catch(NumberFormatException exc)//IF AMOUNT ENTERED IS NOT VALID
wdComponentAPI.getMessageManager().reportException("Invalid Number",true);
Regards
Fahad Hamsa -
Specifying precision and scale
Hello,
I have a table that was created with a column pfixed NUMBER(38). The data contains up to 16 numbers after the decimal point (e.g. <pfixed>4.8283510208129883</pfixed>). XSU loads it with scale of 0, which results in everything after the decimal being truncated. The precision is correctly set to 38, to match the NUMBER column.
Is this a problem with the create table statement, or is there a way to tell XSU what scale to use?
Thanks,
Leilai'm not sure if i understand your problem..
you say you (or someone else) declared a
table with NUMBER(38) and you want 0.??? written to it (or from ??)...
then why not declare your own precision
( format NUMBER(a,b)
where a is size and b is precision)
assume the number xxx.yyyy
format NUMBER(2,4) stores xx.yyyy
format NUMBER(1,2) stores x.yy
format NUMBER(3,1) stores xxx.y
38 is NOT your precision, it's SIZE !!
i hope this helps...
null -
Precision and Scale in NUMBER datatype
In oracle, if you want to store a number like 892.34, you need to declare the NUMBER type like
number(5,2)Here 5 stands for the total number of digits including the numbers after the decimal point.
2 stands the number of digits to the right of the decimal.
Isn't this confusing? Can't they just make the syntax like
number(3,2)where 3 is the number of digits from left till the decimal and 2 is the number of digits after the decimal.create table t ( n number( 6, 5 ) ) ;
alter table t add constraint c check ( n between 0.00001 and 0.1 ) ;
invalid value will throw
SQL Error: ORA-02290: check constraint (SYS.C) violated
*Cause: The values being inserted do not satisfy the named check
*Action: do not insert values that violate the constraint. -
I have a xml document that I want to test against the shredded schemas. The XSD type creates a number(6,1).
When I insert the xml document if the number is 2.22 it will insert the record even if the XSD has a xs:fractionDigits value="1"
I realize Oracle uses floating point and truncates or rounds the number. Is there a way to have an error on the xml document load if the decimal point is larger then one digit as defined in the XSD?Mark,
The schema has 10 xsd files with includes. I pasted a portion of the one that had the fractional digit 6,1. Did you want all 10, or this what you are looking for?
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by mbarth (Computer Science Corp.) -->
<xs:schema targetNamespace="http://science.doe.gov/ePME" xmlns:epme="http://science.doe.gov/ePME" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:include schemaLocation="countries.xsd"/>
<xs:include schemaLocation="purpose.xsd"/>
<xs:include schemaLocation="reason.xsd"/>
<xs:include schemaLocation="research_areas.xsd"/>
<xs:include schemaLocation="research_cat_ids.xsd"/>
<xs:include schemaLocation="work_cat_ids.xsd"/>
<xs:complexType name="fiscal_year_budget_info">
<xs:sequence>
<xs:element name="staffing_scientific" nillable="false" minOccurs="0">
<xs:annotation>
<xs:documentation>Scientific staffing in full-time equivalent person years</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="1"/>
<xs:totalDigits value="6"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="staffing_other_direct" minOccurs="0">
<xs:annotation>
<xs:documentation>Other direct staffing in full-time equivalent person years</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="1"/>
<xs:totalDigits value="6"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="staffing_total_direct" minOccurs="0">
<xs:annotation>
<xs:documentation>Total direct staffing in full-time equivalent person years</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="1"/>
<xs:totalDigits value="6"/>
</xs:restriction>
</xs:simpleType> -
The SDO_ORDINATES in the CTL file generated by shp2sdo contain only 6 decimal places even though the source shapefile contains ordinates with a larger scale (as evidenced via ESRI products and reviewing the geometries generated when the spatial layer is created via ArcSDE). The -t tolerance parameter seems to have no effect on the actual SDO_ORDINATES scale (just effects the metadata). Is this a limitation in shp2sdo or is something else going on here?
Thank you for your help, JamesCan anyone please tell were I can get a copy of shp2sdo. I have done a search on it's name and have found no software by this name.
Thanks,
John look at:
http://otn.oracle.com/software/products/spatial/content.html
for the shapefile converter and other Spatial tools
Mark -
Validating numeric value in a filename
I have a file and the filename should be like ABC_12345_RES_20150410.txt and i have to validate the filename.I am facing problem in validating the numeric value which can change and its length also can change.
I am using the following expression to validate whether its the numeric value /not:
(DT_I4)(SUBSTRING( @[User::FileName] ,FINDSTRING( @[User::FileName] ,"_", 1)+1, FINDSTRING( @[User::FileName] ,"_", 2)-FINDSTRING( @[User::FileName] ,"_", 1)-1)) == (DT_I4)(SUBSTRING( @[User::FileName]
,FINDSTRING( @[User::FileName] ,"_", 1)+1, FINDSTRING( @[User::FileName] ,"_", 2)-FINDSTRING( @[User::FileName] ,"_", 1)-1))
This statement is failing the package when i am entering a character instead of digit.. But i don't want the package to fail rather i just want to log the exception in this case.
Is there any other way to validate the numeric Value?
Many Thanks in Advance!Thanks a ton Martin for your advice.
I can do that but Actually the conversion is failing.. its giving error that cannot convert to (DT_I8). M looking for any other way to validate the numeric value. -
How to connect input string value to numerical values
Hello,
I am trying to figure out how to connect a single user's input string value to numerical values. Basically I want the user to input the name of a gas that I have a list for (I believe i put the list of gasses in an array>). Then I want to match 2 numerical values "a" and "b" depending on which gas name the user has put in. These "a" and "b" values will be automatically matched with the gas name from a list I put. For example the gas hydrogen has a value of 3 for "a" and 4 for "b. so when the user puts the name "hydrogen" in a string constant, automatically "a" and "b" should be outputted. I will be connecting a and b to a formula
Thanks for any help
Solved!
Go to Solution.student11 wrote: These "a" and "b" values will be automatically matched with the gas name from a list I put. For example the gas hydrogen has a value of 3 for "a" and 4 for "b".
This sounds a lot like an Enum to me. Make sure you type def the enum to make sure updates quickly and easily make it to all copies of the enums.
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines -
Popup Key LOV, NULL and "Invalid numeric value undefined for column"
Hello.
I've created an item based on database column of NUMBER type and set the following properties:
Display As = Popup Key LOV (Displays description, returns key value)
List of values definition=select 'display_value' d, 1 r from dual
Null display value=%
Null return value=
Display Null=Yes
When I select "%" in the LOV and try to apply changes to database I get error:
ORA-20001: Error in DML: p_rowid=1781, p_alt_rowid=N1, p_rowid2=, p_alt_rowid2=. ORA-20001: Invalid numeric value undefined for column N2
Error Unable to process row of table TTT.
If I set Display As = Select List, all works fine. But I need Popup Key LOV.
Could anybody help me?
I use Application Express 2.2.1.00.04Hi all,
I did my homework and solved this issue. First I would like to thank Patrick Wolf for the invaluable help he gives out on thread Re: Null value handling in LOVs The code presented here is just a minor edit to his code, but an essential one when dealing with Popup Key LOV items.
Here's what I did:
1. Create an Application Process.
Name: RemoveNulls
Sequence: 0
Point: On Submit: After Page Submission - Before Computations and Validations
Process Text:
BEGIN
FOR rItem IN
( SELECT ITEM_NAME
FROM APEX_APPLICATION_PAGE_ITEMS
WHERE APPLICATION_ID = TO_NUMBER(:APP_ID)
AND PAGE_ID IN (TO_NUMBER(:APP_PAGE_ID), 0)
AND LOV_DISPLAY_NULL = 'Yes'
AND LOV_DEFINITION IS NOT NULL
AND LOV_NULL_VALUE IS NULL
LOOP
IF (V(rItem.ITEM_NAME) = '%null' || '%' OR V(rItem.ITEM_NAME) = 'undefined')
THEN
Apex_Util.set_session_state(rItem.ITEM_NAME, NULL);
END IF;
END LOOP;
END;Error Message: #SQLERRM#Condition: None
2. You should be able to submit a Popup Key LOV with a NULL value now.
Once again, THANKS, Patrick! You rock! I'm seriously thinking of trying ApexLib now :)
Georger -
How do I allocate a numerical value to a 5 part likert scale question
I have a survey questionaire and the 15 questions are all arranged on a 5 part 'Liket scale' of strongly agree to strongly disagree.
How do I allocate numerical values to each question response?
I don't want the respondents to see the scoring.
The reason I need to do this is some response lines are reverse scored. That is to say some lines would be scored 1 to 5 and other lines 5 to 1.
I think this feature is available on survey monkey.
Is it available in Acrobat X Pro or Formscentral?
I'd appreciate your suggestions
Kind regards
spreid1Hi,
You can assign numerical responses to the likert answers as follows:
1. Go into the response table and select the "Table" toolbar button:
2. Select the header for your Likert questions in the response table.
3. Click the "Choices" button on the toolbar and select "Edit choice list..."
4. Select the checkbox for "Assign data values to choices".
5. Enter the choice data values in the right-hand column.
Maybe you are looking for
-
Read-only filesystem after reinstallation,chmod failure
I decided to switch to a pure systemd init yesterday. Despite strictly followed wiki my system failed to init with switch to systemd emergency mode with no way to cure the problem. So I followed with reinstallation of my system (32bit on 64bit HW as
-
Content Conversion Parameters in Communication Channel
Hi, I have a requiremnet to develop: Scenario is SAP to Legacy System Based on Mapping Sheet, I have defined Data types for both SAP and Legacy system. The Data structure is There is a root node IS with occurance 1-n. In this node there is another no
-
Kernel panic after installing Yosemite (when connected to power source)
My Macbook Pro is crashing regularly since I installed Yosemite a couple of weeks back. This only happens when the laptop is connected to a power source and not in use. I get the following Kernel Panic message. Would really appreciate some help since
-
Satellite P850/P855 - Sound/Image lag while using media
Hi While I'm listening on spotify or seing a movie, theres a small lag every 10 or 20 minute. I bought this laptop 3 days ago and haven't used it that much. Any idea how I can fix this? Could it be something wrong in the hardware? Per
-
Can you replace the back housing on iPad mini 3 gold edition?
I've scratched it. Arghh!! Brand new and scratch already. I realize it's not the screen, but still bummed. Can you just replace the back housing? I have the mini 3 gold edition with 64gb memory. Any help, much appreciated. Thanks.