I have a default value in Database. When I was inserting a new record, that time I need to avoid the default value column in the entity.
For Example:
CreatedDate Default value in database
but in my UI I need to avoid the column CreatedDate for Inserting time
Related
I have one field on my form (field example name "completion_date"). This data is stored to table column "completion_date". When users edits the detail, data is overwritten in the backend table field as a default way of storing the data. How can I pass on the existing data in this column to a new column (completion_date_a) when the user saves a new date in the field.
One option is to create a database trigger, e.g.
create or replace trigger trg_bu_date
before update on your_table
for each row
begin
:new.completion_date_a := :old.completion_date;
end;
/
Littlefoots' answer is correct, but you could also do this in apex with very little work. Suppose your form items are P1_COMPLETION_DATE and P1_COMPLETION_DATE_A, both mapped to their respective database column. P1_COMPLETION_DATE_A is hidden. Add a computation to P1_COMPLETION_DATE_A with point "After Header" and type "Item". Pick P1_COMPLETION_DATE as item.
Now when you save the form, the value of P1_COMPLETION_DATE_A will be set to the value of P1_COMPLETION_DATE when it was selected.
My migration is like so:
$table->bigIncrements('id');
$table->timestamp('from_date');
$table->timestamp('to_date');
$table->timestamps();
The problem is that when I migrate it, the second one which is from_date automatically gets on update CURRENT_TIMESTAMP attribute so it means when I update other columns this column will be updated too. That's what I don't want. How can I prevent it?
You can add nullable to the column in order to remove the constraint.
$table->timestamp('from_date')->nullable();
Unfortunately I think that this is the only solution. Then you can add a form validation in order to prevent setting null value for the field.
-- EDIT
$table->timestamp('from_date')->default(DB::raw('CURRENT_TIMESTAMP'));
// or
$table->timestamp('from_date')->useCurrent();
Try this as well, I believe this is what the created_at has.
You need to make the DateTime column nullable, then MySQL won't add that. By default, MySQL adds that to the first timestamp in the table, unless explicitly told not to (via allowing a null value for the field). This is a MySQL thing, not a Laravel thing.
$table->timestamp('colName')->nullable();
Read :
Automatic Initialization and Updating for TIMESTAMP and DATETIME - MYSQL DOCS
Laravel & MySQL auto-adding “on update current_timestamp()” to timestamp fields
This behaviour is native to MySQL. You can read about it on this documentation page:
TIMESTAMP and DATETIME columns have no automatic properties unless they are specified explicitly, with this exception: If the explicit_defaults_for_timestamp system variable is disabled, the first TIMESTAMP column has both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP if neither is specified explicitly.
The docs go on to specify that there are two strategies for avoiding this behaviour:
Enable the explicit_defaults_for_timestamp variable in your database configuration.
When defining your timestamp column, specify a DEFAULT or make the column nullable.
I have an existing table with millions of records. Now I want to add a new column with default value. But for performances reasons I don't want to apply the new value immediately to existing records. Is there one handy way to do it?
So far, what in my mind is to work around this issue is to:
Add the new column, but do not specify a default (DDL)
Update by chunk the old rows to the default value (to avoid locking the table) (DML)
COMMIT
Alter the column to add a default (DDL)
Another option would be
Add the new column without any default value but make it accept
NULL
While inserting new record, insert NULL for this column
CREATE a AFTER INSERT trigger and update the column with it's
default value.
Something like
CREATE TRIGGER trg_update
AFTER INSERT
ON table_name
BEGIN
UPDATE table_name
SET new_column = (default_value)
WHERE Id_Column = :new.Id_Column;
END;
I have a Tabular Form in my Oracle Apex application. There is a column as UPDATED_DATE. I have set Tabular Form Attributes of this column as below.
When i'm inserting data, UPDATED_DATE column in database table is filling with a value. But when i'm updating existing record, UPDATED_DATE column is not filling with a new value. old date is remaining without changing to a newer data.
How can i solve this ?
The default will only set a value if the field is empty. On your first entry the field is empty, and therefore the updated_Date is set. On updating, the field is allready set, and therefore won't be updated.
You need to create a dynamic action (assuming you use apex 4 or above) and use that to update the date field. Your dynamic action should be triggerd on change of an table row and subsequently set the date field to the current date.
Let me now if you need help on the dynamic action.
I have a table A (3 columns) in production which is around 10 million records. I wanted to add one more column to that table and also I want to make default value to 1. Is it going to impact production DB performance If add a column with default value 1 or something else. What would be best approach to this to avoid any kind of performance impact on DB? your thoughts are much appreciated!!
In Oracle 11g the process of adding a new column with a default value has been considerably optimized. If a newly added column is specified as NOT NULL, default value for that column is maintained in the data dictionary and it's no longer required for a default value of a column to be stored for all records in a table, so it's no longer required to update each record with a default value. Such an optimization considerably reduces amount of time the table is exclusively locked during the operation.
alter table <tab_name> add(<col_name> <data_type> default <def_val> not null)
Moreover, column with a default value added that way will not consume space, until you deliberately start to update that column or insert a record with a non default value for that column. So the operation of adding a new column with a default value and not null constraint specified completes pretty quick.
i think that it is better that you create a table as backup table with this syntax:
create table BackUpTable as SELECT * FROM YourTable;
alter table BackUpTable add (newColumn number(5,0)default 1);