全部插入
Insert All into
下面和之前的换行有区别吗select
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;
并且在 select
之前没有换行
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;
我注意到第一个没有在 table 中插入任何内容,并且在日志中显示为
D
-
X
虽然没有换行符的第二个块在日志中显示为
创建了 3 行。
++日志
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
没有区别。您可以根据需要添加任意多的空格(最多 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 here
更新
Why does SQL/Plus show this?
D
-
X
SQL/Plus 的默认行为是不接受 SQL 语句中的空行,并假定这将终止语句 (SQL/Plus documentation and relevant dba.stackechange question)。要更改此行为以允许空行,您需要包含指令:
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 将对其进行处理并显示查询的输出。
如果您启用空行,那么它将处理完整的语句。
下面和之前的换行有区别吗select
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;
并且在 select
之前没有换行
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;
我注意到第一个没有在 table 中插入任何内容,并且在日志中显示为
D
-
X
虽然没有换行符的第二个块在日志中显示为 创建了 3 行。
++日志
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
没有区别。您可以根据需要添加任意多的空格(最多 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 here
更新
Why does SQL/Plus show this?
D - X
SQL/Plus 的默认行为是不接受 SQL 语句中的空行,并假定这将终止语句 (SQL/Plus documentation and relevant dba.stackechange question)。要更改此行为以允许空行,您需要包含指令:
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 将对其进行处理并显示查询的输出。
如果您启用空行,那么它将处理完整的语句。