我有一个包含10列的表格,而我的INSERT
语句仅引用该表格中的特定列。
INSERT INTO SCHEMA.TABLE
(COL_1, COL_2)
VALUES
(VAL_1, VAL_2);
...或...
INSERT INTO SCHEMA.TABLE
(COL_1, COL_2)
SELECT VAL_1, VAL_2 FROM SCHEMA_2.TABLE_2;
但是,当我执行它时,其他列总是以空值插入,而不是根据列类型(即数字)而具有相应的值。这是,如果我有一个数字列,我应该看到一个零。
如何正确插入?
***请考虑我没有DDL特权,并且我正在尝试插入现有表中。
答案 0 :(得分:2)
最简单的方法可能是为您的列提供默认值:
ALTER TABLE schema.table MODIFY (COL_1 NUMBER DEFAULT 0);
答案 1 :(得分:1)
对该列使用DEFAULT
作为0
或
use NVL( column_name, 0 ) --as per oracle syntax
--this would mean whenever theres null found for
-- that column set it to 0 (will work on insert)
或
Update column set column=0 where column IS NULL
--(will work after insert as the name suggests update)
答案 2 :(得分:1)
DEFAULT
的值是;但是,请注意,您必须注意所做的事情,因为column可能无法获得其默认值。这是一个示例:
SQL> create table test
2 (id number primary key,
3 name varchar2(10),
4 address varchar2(20) default 'Unknown', --> columns with default
5 num_val number default 0 --> values
6 );
Table created.
如果您要插入值而没有指定应该获取默认值的列,则一切都会如您所愿:
SQL> insert into test (id, name) values (1, 'Little');
1 row created.
SQL> select * from test;
ID NAME ADDRESS NUM_VAL
---------- ---------- -------------------- ----------
1 Little Unknown 0
看到了吗? ADDRESS
和NUM_VAL
都具有默认值。
但是,如果您在INSERT
语句中提及这些列,尽管将它们设置为NULL
,但它们不会设置为默认值,而是NULL
:
SQL> insert into test (id, name, address, num_val)
2 values (2, 'Foot', null, null);
1 row created.
SQL> select * from test;
ID NAME ADDRESS NUM_VAL
---------- ---------- -------------------- ----------
1 Little Unknown 0
2 Foot
如您所见,在ID = 2
和ADDRESS
列中,带有NUM_VAL
的行未获得默认值。
因此,请注意您的工作。
答案 3 :(得分:1)
虽然坦率地说我不建议这样做,但是您可以使用触发器来实现您的目标:
CREATE OR REPLACE TRIGGER SCHEMA.TABLE_BI
BEFORE INSERT ON SCHEMA.TABLE
FOR EACH ROW
BEGIN
:NEW.COL_1 := COALESCE(:NEW.COL_1, 0); -- NUMBER column
:NEW.COL_2 := COALESCE(:NEW.COL_2, ' '); -- VARCHAR column
:NEW.COL_3 := COALESCE(:NEW.COL_3, SYSDATE); -- DATE column
END SCHEMA.TABLE_BI;
但是,创建触发器可能需要您没有的特权。
答案 4 :(得分:0)
要回答这个问题:需要在创建表时定义默认值。在这种情况下,我无法执行此操作,因为即使在数字的情况下,表定义仍指示为NULL。
还是谢谢。