插入、选择、值

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 文档链接 -