插入语句错误,ORA-00984:此处不允许列

时间:2016-06-07 10:19:18

标签: sql oracle

任何有帮助的人我在日期时间都不允许出现错误列!

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE,
    FROM_DATE,
    TO_DATE,
    ADDED_PERIOD_IN_MONTHS,
    MEMBER_AMOUNT,
    THE_CURRENCY,
    MATURITY_DATE
) VALUES (
    4,
    convert(datetime, '6/1/2016 12:00:00 AM', 5),
    convert(datetime, '6/1/2016 12:00:00 AM', 5),
    0,
    2500,
    'OMR',
    convert(datetime, '6/30/2016 12:00:00 AM', 5)
);

2 个答案:

答案 0 :(得分:2)

您正在尝试使用Oracle中的SQL Server CONVERT() function - Oracle CONVERT() function从一个字符集转换为另一个字符集并且无法执行您想要的操作。

相反,您可以使用日期文字:

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE,
    FROM_DATE,
    TO_DATE,
    ADDED_PERIOD_IN_MONTHS,
    MEMBER_AMOUNT,
    THE_CURRENCY,
    MATURITY_DATE
) VALUES (
    4,
    DATE '2016-06-01',
    DATE '2016-06-01',
    0,
    2500,
    'OMR',
    DATE '2016-06-30'
);

在Oracle中,所有DATE类型都有日期和时间组件 - 日期文字语法只会将时间组件设置为00:00:00(或12小时内的12:00:00 AM

或者,如果要指定时间组件,则可以使用timestamp文字(如果这是您要存储的列的类型,Oracle将隐式转换为DATE类型):

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE,
    FROM_DATE,
    TO_DATE,
    ADDED_PERIOD_IN_MONTHS,
    MEMBER_AMOUNT,
    THE_CURRENCY,
    MATURITY_DATE
) VALUES (
    4,
    TIMESTAMP '2016-06-01 00:00:00',
    TIMESTAMP '2016-06-01 00:00:00',
    0,
    2500,
    'OMR',
    TIMESTAMP '2016-06-30 00:00:00'
);

或者您可以使用TO_DATE()函数将字符串文字明确地转换为日期:

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE,
    FROM_DATE,
    TO_DATE,
    ADDED_PERIOD_IN_MONTHS,
    MEMBER_AMOUNT,
    THE_CURRENCY,
    MATURITY_DATE
) VALUES (
    4,
    TO_DATE( '6/1/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM' ),
    TO_DATE( '6/1/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM' ),
    0,
    2500,
    'OMR',
    TO_DATE( '6/30/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM' )
);

答案 1 :(得分:0)

表达式convert(datetime, '6/1/2016 12:00:00 AM', 5)要求名称为datetime的列。但是您的insert语句根本不提供涉及任何列的上下文,因此查询解析器无法理解datetime。因此,您的ORA-00948错误。

我猜你试图将日期/时间常数(从你的例子中可能意味着2016年6月1日或2016年1月6日)变为date数据类型。您需要使用TO_DATE()函数将字符串转换为该格式。我不打算建议一种特殊形式的调用,因为我不确切知道你的字符串是如何格式化的。