INSERT,SELECT,VALUES

时间:2015-01-08 23:20:51

标签: sql database oracle

我有这样的表: - (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)

和这样的表: -

(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)

我想用 BL_SUBSCRIBER_PACKAGE 中的MSISDN填充 BL_SUBSCRIBER 表格 同时,我想用任何数据填充其他列(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')

但它给了我错误(缺少表达) 那么,任何人都可以告诉我如何将数据从一个表复制到另一个表并插入默认所需的数据(在这种情况下,它必须是因为它是非NULL)。 PS:我正在使用Oracle数据库 感谢。

2 个答案:

答案 0 :(得分:2)

当您使用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

答案 1 :(得分:-1)

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文档链接 - https://stackoverflow.com/a/27851367/1466341