我有这样的表: - (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数据库 感谢。
答案 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