Вставить все в - PullRequest
       9

Вставить все в

0 голосов
/ 15 января 2020

Есть ли разница между приведенным ниже символом перевода строки перед выбором


INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)

SELECT * FROM dual;

и отсутствием новой строки перед выбором


INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)
SELECT * FROM dual;

Я заметил, что первый ничего не вставляет в таблицу и в журнале отображается как

D
-
X

В то время как второй блок без новой строки отображается в журнале как 3 созданные строки.

Running by toad log given under script output vs running using sqlplus

++ LOGS

SQL> desc LOOKUPTABLE_TYPE;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 LOOKUPTABLE_NAME                          NOT NULL VARCHAR2(32)
 COLUMN_NAME                               NOT NULL VARCHAR2(32)
 COLUMN_ORDER                              NOT NULL NUMBER(2)
 COLUMN_TYPE                               NOT NULL NUMBER(1)
 COLUMN_MODE                               NOT NULL NUMBER(1)

SQL> INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)

SELECT * FROM dual;  2    3    4    5  SQL> 

D
-
X

SQL> commit
  2  ;

Commit complete.

SQL> select * from LOOKUPTABLE_TYPE where LOOKUPTABLE_NAME='LT_EMERGENCY_NUMBER';

no rows selected

SQL> 
SQL> 
SQL> 
SQL> INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)
SELECT * FROM dual;  2    3    4    5  

3 rows created.

SQL> select * from LOOKUPTABLE_TYPE where LOOKUPTABLE_NAME='LT_EMERGENCY_NUMBER';

LOOKUPTABLE_NAME                 COLUMN_NAME                      COLUMN_ORDER
-------------------------------- -------------------------------- ------------
COLUMN_TYPE COLUMN_MODE
----------- -----------
LT_EMERGENCY_NUMBER              BNUMBER                                     2
          0           1

LT_EMERGENCY_NUMBER              Description                                 3
          9           0

LT_EMERGENCY_NUMBER              STREAM                                      1
          0           1

1 Ответ

1 голос
/ 15 января 2020

Разницы нет. Вы можете добавить столько пробелов, сколько захотите (до максимального размера для оператора SQL), не затрагивая значение запроса.

CREATE TABLE lookuptable_type (
  a VARCHAR2(50),
  b VARCHAR2(50),
  c INT,
  d INT,
  e INT
);

Тогда:

INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)

SELECT * FROM dual;

Даст:

3 rows affected

и:

INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)
SELECT * FROM dual;

также даст:

3 rows affected

db <> fiddle здесь


Обновление

Почему SQL / Plus показывает это?

D
-
X

По умолчанию SQL / Plus не допускает пустых строк в операторе SQL и предполагает, что это приведет к завершению оператора ( Документация по SQL / Plus и соответствующий вопрос dba.stackechange ). Чтобы изменить это поведение, чтобы разрешить пустые строки, вам нужно включить директиву:

set sqlblanklines on

Когда SQL / Plus анализирует инструкцию с пустой строкой, он разделяет его на два оператора:

INSERT ALL
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','STREAM',1,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','BNUMBER',2,0,1)
INTO LOOKUPTABLE_TYPE VALUES ('LT_EMERGENCY_NUMBER','Description',3,9,0)

и

SELECT * FROM dual;

Первый - недопустимый синтаксис, а второй - допустимый оператор, и SQL / Plus обработает его и отобразит выходные данные запроса.

Если включить пустые строки тогда он обработает полный оператор.

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