Hi,

I am having a lot of trouble implementing on Oracle.
When I run my app on SQLite or MySQL, but I am having lots of different
errors on Oracle.
One problem I have is that when an error is returned, the application hangs.
I can view the admin app and browse the error ticket, but the thread that
is doing the database operation seems to hang. I have to kill -9 and
restart.

My 1st table created correctly, but my 2nd gave me errors with floats, so I
changed to decimal and finally integer, but I still get errors.
Again, on sqlite and MySQL, it works perfectly, so I'm not sure where the
problem could be.

What I haven't done on the 2nd table is used the "requires" validators as
the user may not have all the required information during the capturing
process.


Error : DatabaseError: ORA-00910: specified length too long for its datatype

Traceback


Traceback (most recent call last):
  File "/data/source/dtos/web2py/gluon/restricted.py", line 205, in
restricted
    exec ccode in environment
  File "/data/source/dtos/web2py/applications/dtos/models/db.py", line 470,
in <module>
    label='Start Date'),
  File "/data/source/dtos/web2py/gluon/dal.py", line 6320, in define_table
    polymodel=polymodel)
  File "/data/source/dtos/web2py/gluon/dal.py", line 633, in create_table
    precision, scale = map(int,field.type[8:-1].split(','))
ValueError: invalid literal for int() with base 10: ''




Here is my model :

db.define_table('DT_SARS_DECLARANT',
    Field('SECTION_ID',
        'string',
        length=1,
        default='B',
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Section Identifier'),
    Field('RECORD_TYPE',
        'string',
        length=6,
        default='DD',
        required=True,
        #requires=[IS_UPPER(), IS_ALPHANUMERIC(), IS_NOT_EMPTY()],
        requires=[IS_UPPER(), IS_ALPHANUMERIC()],
        label='Record Type'),
    Field('RECORD_STATUS',
        'string',
        length=2,
        default='N',
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Record Status',
        comment='''Indicates the status of the record, whether it is
        a new record, an adjusted record or a record that must be deleted
        from the declaration.'''),
    Field('UNIQUE_NUM',
        'string',
        required=True,
        requires=[IS_UPPER(), IS_ALPHANUMERIC(), IS_NOT_EMPTY()],
        label='Unique Number',
        comment='''The submitting entity’s system will have a unique
        identifier for each record. This is the number that must be entered
        into this field.'''),
    Field('ROW_NUMBER',
        'integer',
        required=True,
        requires=IS_INT_IN_RANGE(0, 9999999999),
        label='Row Number',
        comment='''A sequential number to indicate the row number
        in the file.'''),
    Field('TRANS_DUE_DATE',
        'date',
        required=True,
        requires=IS_DATE(),
        label='Transaction Due Date',
        comment='This is the due date of the transactionthat pertains to
this record.'),
    Field('DIV_DECLARANT',
        'string',
        length=1,
        required=True,
        requires=[IS_NOT_EMPTY(), IS_UPPER()],
        label='Divident Declarant',
        comment='Indicates if the entity submitting the file also declared
the dividend for this record.'),
    # @TODO, There is a field that is missing in the Excel sheet.
    # Confirmation if this is not required, else, it will go here...
    Field('NATURE',
        'string',
        length=33,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Dividend Declarant: Nature Of Person',
        comment='The type/category of the divident declarant.'),
    Field('REG_NAME',
        'string',
        length=150,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Dividend Declarant: Registered Name',
        comment='The name of the divident declarant.'),
    Field('TRADE_NAME',
        'string',
        length=150,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Trading Name',
        comment='The name the devidend declaring entity is trading.'),
    Field('REG_NUM',
        'string',
        length=15,
        required=False,
        requires=[IS_UPPER(), IS_ALPHANUMERIC()],
        label='Registration Number',
        comment='The registration number of the divedent declaring
entity.'),
    Field('ISIN_NUM',
        'string',
        length=12,
        required=False,
        requires=[IS_UPPER(), IS_ALPHANUMERIC()],
        label='ISIN Number',
        comment='The international security identification number.'),
    # @TODO The following Income Tax number field is marked 'On Announcemnt.
    # Confirmation required is this field is to be included. Is is for
now...
    Field('INC_TAX_NUM',
        'integer',
        required=False,
        requires=IS_INT_IN_RANGE(),
        label='Income Tax Reference Number',
        comment='The entity\'s income tax number as registered at SARS.'),
    Field('RSA_RES',
        'string',
        length=1,
        required=True,
        default='Y',
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Resident Of RSA',
        comment='Indicates if the dividend declaring entity is resident in
South Africa.'),
    Field('SHARES_LISTED',
        'string',
        length=1,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Shares Listed On JSE',
        comment='Indicates if the shares for which the dividend is declared
are listed on the JSE.'),
    Field('MICRO_BUS',
        'string',
        length=1,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Micro Business',
        comment='Indicates if the dividend declaring entity is registered
as a micro busines.'),
    Field('STC_CREDIT',
        'double',
        required=False,
        requires=IS_FLOAT_IN_RANGE(0, 999999999999999.99),
        label='Available STC Credit',
        comment='''This is the rolling balance of the STC credit that the
dividend declaring entity
        has available to utilise when dividend is declared.'''),
    Field('STC_CREDIT_UTIL',
        'double',
        required=False,
        requires=IS_FLOAT_IN_RANGE(0, 999999999999999.99),
        label='STC Credit Utilised',
        comment='The amount of STC credit that is utilised with this
declaration of dividend.'),
    Field('ENTITY_TYPE',
        'string',
        length=35,
        required=False,
        requires=[IS_NOT_EMPTY(), IS_ALPHANUMERIC()],
        label='Entity Type',
        comment='The type/ category of the entity the dividend was received
from.'),
    Field('ENTITY_NAME',
        'string',
        length=150,
        required=False,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Entity Name',
        comment='The name of the entity the dividend was received from.'),
    Field('ENTITY_TRADE_NAME',
        'string',
        length=150,
        required=False,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Entity Registered Name',
        comment='The name the entity that the dividend was received from is
trading under.'),
    Field('ENTITY_REG_NUM',
        'string',
        length=15,
        required=False,
        requires=[IS_UPPER(), IS_ALPHANUMERIC(), IS_NOT_EMPTY()],
        label='Entity Registration Number',
        comment='The number of the entity that the dividend was received
from.'),
    # @TODO Field is highlighted. We will include it for now.
    Field('ENTITY_REF_NUM',
        'integer',
        required=False,
        requires=[IS_NOT_EMPTY(), IS_INT_IN_RANGE(0, 999999999999)],
        label='Entity Tax Reference Number',
        comment='The entity income tax number as registered at SARS.'),
    Field('ENTITY_REC_DATE',
        'date',
        required=False,
        requires=IS_DATE(),
        label='Entity Date Received',
        comment='The date on which the dividend was received by the
submitting entity.'),
    Field('DIV_TYPE',
        'string',
        length=2,
        required=True,
        requires=[IS_UPPER(), IS_NOT_EMPTY()],
        label='Divident Type',
        comment='This field indicates the type of dividend that is
declared/ received.'),
    Field('NUM_SHARES',
        'double',
        required=True,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,
999999999999999.999999)],
        label='Number Of Shares',
        comment='Number of shares or units to which the dividend relates.'),
    Field('DIV_PER_SHARE',
        'double',
        required=True,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,
999999999999999.999999)],
        label='Dividend Per Share',
        comment='The dividend that is declared per share or unit.'),
    Field('DIV_VALUE',
        'double',
        required=True,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,
999999999999999.999999)],
        label='Divident Value',
        comment='The gross value of the dividend declared.'),
    Field('DATE_DECLARED',
        'date',
        required=True,
        requires=IS_DATE(),
        label='Date Declared',
        comment='The date the dividend was announced.'),
    Field('DATE_PAY',
        'date',
        required=True,
        requires=IS_DATE(),
        label='Date Paid/Payable',
        comment='The date on which the dividend was paid by the dividend
declaring entity.'),
    Field('STC_CREDIT_SHARE',
        'double',
        required=True,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0.000000,
999999999999999.999999)],
        label='STC Credit Per Share',
        comment='''The portion of the dividend per share that should be
subtracted for STC credit.
        This value must be carried through to the recipient detail.'''),
    Field('MICRO_EXEMPT',
        'double',
        required=False,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0.00,
999999999999999.99)],
        label='Micro Business Exemption',
        comment='The amount that can be claimed as allowable micro business
exemption.'),
    Field('IS_TAX_PAY',
        'double',
        required=False,
        requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0.00,
999999999999999.99)],
        label='IS Tax Payable',
        comment='The amount of tax paid to SARS in respect of In Specie
dividends.')
   )



db.define_table('DT_SARS_RECIPIENT',
    Field('SECTION_ID',
        'string',
        length=1,
        required=True,
        label='Section Identifier'),
    Field('RECORD_TYPE',
        'string',
        length=6,
        required=True,
        label='Record Type'),
    Field('RECORD_STATUS',
        'string',
        length=2,
        required=True,
        label='Record Status'),
    Field('UNIQUE_NUM',
        'string',
        length=100,
        required=True,
        label='Unique Number'),
    Field('ROW_NUM',
        'integer',
        required=True,
        label='Row Number'),
    Field('TRANS_DUE_DATE',
        'date',
        required=True,
        requires=IS_DATE(),
        label='Transaction Due Date'),
    Field('DIV_UNIQUE_NUM',
        'string',
        length=100,
        required=True,
        label='Dividend Unique Number'),
    Field('DIV_TYPE',
        'string',
        length=2,
        required=True,
        label='Dividend Type'),
    Field('PERSON_LIABLE',
        'string',
        length=2,
        required=True,
        label='Person Liable For Tax'),
    Field('DIST_TYPE',
        'string',
        length='2',
        required=True,
        label='Distribution Type'),
    Field('NATURE_OF_PERSON',
        'string',
        length=33,
        required=True,
        label='Nature Of Person'),
    Field('FIRST_NAMES',
        'string',
        length=100,
        label='First Names'),
    Field('SURNAME_REGNAME',
        'string',
        length=125,
        label='Surname / Registered Name'),
    Field('TRADE_NAME',
        'string',
        length=150,
        label='Trading Name'),
    Field('TAX_RES',
        'string',
        length=3,
        label='Tax Residency'),
    Field('ID_TYPE',
        'string',
        length=3,
        label='Identification Type'),
    Field('ID_NUM',
        'string',
        length=30,
        label='Identification Number'),
    Field('CNTY_ISSUE',
        'string',
        length=3,
        label='Country of Issue'),
    Field('INC_TAX_REF',
        'integer',
        label='Income Tax Reference Number'),
    Field('DOB_INC',
        'date',
        label='Date Of Birth\/Inception'),
    Field('EXEMPT_CLAIM_PAR',
        'string',
        length=1,
        label='Exemption Claimed Under Par'),
    Field('DTA_RATE_REQ',
        'string',
        label='DTA Reduced Rate Requirements Met'),
    Field('DATE_PAY',
        'date',
        label='Date Paid\/Payable'),
    Field('NUM_SHARES',
        'integer',
        label='Number Of Shares'),
    Field('DIV_SHARE',
        'integer',
        label='Number Of Dividends Per Share'),
    Field('DIV_VALUE',
        'integer',
        label='Dividend Value'),
    Field('STC_SHARE',
        'string',
        length=22,
        label='STC Credit Per Share'),
    Field('MICRO_EXEMPT',
        'string',
        length=18,
        label='Micro Business Exemption'),
    Field('TAX_RATE_APPL',
        'string',
        length=5,
        label='Tax Rate Applicable'),
    Field('REBATE_FOREIGN',
        'integer',
        label='Rebate For Foreign Tax Paid'),
    Field('TAX_WITHHELD',
        'integer',
        label='Tax Withheld'),
    Field('NET_AMNT_BO',
        'integer',
        label='Net Amount Distributed To BO'),
    Field('CORP_ACT_ID',
        'integer',
        label='Corporate Action ID'),
    Field('SIN',
        'integer',
        length=25,
        label='SIN'),
    Field('SCA_NUM',
        'integer',
        label='SCA ID'),
    Field('BENEF_ACC_NUM',
        'integer',
        label='Beneficial Owner Account Number'),
    Field('DOC_REF',
        'integer',
        label='Document Reference Number'),
    Field('STATUS',
        'string',
        length=3,
        label='Status'),
    Field('START_DATE',
        'date',
        label='Start Date'),

    )


Any idea what I could be missing to satisfy Oracle?

Many thanks

Rakesh

Reply via email to