В INSERT, как сделать нулевые или нулевые значения? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть таблица из 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, и япытается вставить в существующую таблицу.

Ответы [ 4 ]

0 голосов
/ 28 декабря 2018

Хотя, честно говоря, я не рекомендую сделать это, но вы можете использовать триггер для достижения своей цели:

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;

Однако создание триггера можеттребовать привилегий, которых у вас нет.

0 голосов
/ 27 декабря 2018

ИСПОЛЬЗОВАНИЕ 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)
0 голосов
/ 27 декабря 2018

DEFAULT значение это;однако, обратите внимание, что вы должны обратить внимание на то, что вы делаете, потому что столбец может не получить значение по умолчанию.Вот пример:

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.

Поэтому обратите внимание начто ты делаешь.

0 голосов
/ 27 декабря 2018

Самый простой подход, вероятно, даст значения по умолчанию для ваших столбцов:

ALTER TABLE schema.table MODIFY (COL_1 NUMBER DEFAULT 0);
...