插入、选择、值
INSERT, SELECT, VALUES
我有 table 这样的:-
(BL_SUBSCRIBER)
Name Null? Type
----------------------------------------- -------- -------
MSISDN NOT NULL VARCHAR2(20)
SUBSCRIBER_ID NOT NULL VARCHAR2(20)
BILLING_ID VARCHAR2(20)
SUB_TYPE NOT NULL VARCHAR2(2)
SUB_TYPE_EXTRA VARCHAR2(20)
LANGUAGE NOT NULL VARCHAR2(2)
TIME_RESTRICT_FLAG NOT NULL VARCHAR2(1)
和table像这样:-
(BL_SUBSCRIBER_PACKAGE)
MSISDN NOT NULL VARCHAR2(50)
PACKAGE_SEQ NOT NULL NUMBER(8)
ID NOT NULL VARCHAR2(20)
OBJTYPE NOT NULL VARCHAR2(10)
TYPE NOT NULL VARCHAR2(10)
我想用来自[的MSISDNtableBL_SUBSCRIBER填充=13=]BL_SUBSCRIBER_PACKAGE
同时,我想用任何数据填充其他列(NOT NULL),
我尝试了以下
insert into BL_SUBSCRIBER (
MSISDN,
SUBSCRIBER_ID,
SUB_TYPE,
LANGUAGE)
values (
select MSISDN from BL_SUBSCRIBER_PACKAGE,
sub_id_seq.nextval, //sub_id_seq is a sequence already defined.
'prepaid',
'EN')
但它给我错误(缺少表达式)
所以,谁能告诉我如何将数据从一个 table 复制到另一个并插入默认需要的数据(在这种情况下,它是必须的,因为它不是 NULL)。
PS:I正在使用 Oracle 数据库
谢谢。
当您使用 select
作为 insert
的来源时,您不需要 values
:
insert into BL_SUBSCRIBER (MSISDN,SUBSCRIBER_ID,SUB_TYPE,LANGUAGE)
select MSISDN
sub_id_seq.nextval,
'prepaid',
'EN'
from BL_SUBSCRIBER_PACKAGE;
像往常一样,手册中记录了正确的语法:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9014.htm#SQLRF55051
它还有一个例子:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9014.htm#SQLRF55103
尝试
insert into BL_SUBSCRIBER (MSISDN,SUBSCRIBER_ID,SUB_TYPE,LANGUAGE)
select
MSISDN,
sub_id_seq.nextval, //sub_id_seq is a sequence already defined.
'prepaid',
'EN'
from BL_SUBSCRIBER_PACKAGE;
另请查看下面@a_horse_with_no_name 的回答以获得一些有用的 Oracle 文档链接 -
我有 table 这样的:- (BL_SUBSCRIBER)
Name Null? Type
----------------------------------------- -------- -------
MSISDN NOT NULL VARCHAR2(20)
SUBSCRIBER_ID NOT NULL VARCHAR2(20)
BILLING_ID VARCHAR2(20)
SUB_TYPE NOT NULL VARCHAR2(2)
SUB_TYPE_EXTRA VARCHAR2(20)
LANGUAGE NOT NULL VARCHAR2(2)
TIME_RESTRICT_FLAG NOT NULL VARCHAR2(1)
和table像这样:-
(BL_SUBSCRIBER_PACKAGE)
MSISDN NOT NULL VARCHAR2(50)
PACKAGE_SEQ NOT NULL NUMBER(8)
ID NOT NULL VARCHAR2(20)
OBJTYPE NOT NULL VARCHAR2(10)
TYPE NOT NULL VARCHAR2(10)
我想用来自[的MSISDNtableBL_SUBSCRIBER填充=13=]BL_SUBSCRIBER_PACKAGE 同时,我想用任何数据填充其他列(NOT NULL), 我尝试了以下
insert into BL_SUBSCRIBER (
MSISDN,
SUBSCRIBER_ID,
SUB_TYPE,
LANGUAGE)
values (
select MSISDN from BL_SUBSCRIBER_PACKAGE,
sub_id_seq.nextval, //sub_id_seq is a sequence already defined.
'prepaid',
'EN')
但它给我错误(缺少表达式) 所以,谁能告诉我如何将数据从一个 table 复制到另一个并插入默认需要的数据(在这种情况下,它是必须的,因为它不是 NULL)。 PS:I正在使用 Oracle 数据库 谢谢。
当您使用 select
作为 insert
的来源时,您不需要 values
:
insert into BL_SUBSCRIBER (MSISDN,SUBSCRIBER_ID,SUB_TYPE,LANGUAGE)
select MSISDN
sub_id_seq.nextval,
'prepaid',
'EN'
from BL_SUBSCRIBER_PACKAGE;
像往常一样,手册中记录了正确的语法:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9014.htm#SQLRF55051
它还有一个例子:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9014.htm#SQLRF55103
尝试
insert into BL_SUBSCRIBER (MSISDN,SUBSCRIBER_ID,SUB_TYPE,LANGUAGE)
select
MSISDN,
sub_id_seq.nextval, //sub_id_seq is a sequence already defined.
'prepaid',
'EN'
from BL_SUBSCRIBER_PACKAGE;
另请查看下面@a_horse_with_no_name 的回答以获得一些有用的 Oracle 文档链接 -