首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在具有虚拟列的Oracle表中插入数据?

如何在具有虚拟列的Oracle表中插入数据?
EN

Stack Overflow用户
提问于 2018-08-14 03:50:30
回答 2查看 2.3K关注 0票数 1

我有一个从oracle数据库加载数据表的.Net应用程序。该表包含一个虚拟列。

不允许对虚拟列执行

Insert INSERT操作

我确实理解这个错误,但我不知道在将数据保存回数据库时如何跳过虚拟列。

下面是我的代码:

代码语言:javascript
复制
    Dim Command As OracleCommand
    Dim TempDataAdapter As OracleDataAdapter
    Dim DataSet = new DataSet
    Dim Name = "MyTable"
    Dim TempDataAdapter As OracleDataAdapter
    Dim DataTable as DataTable

    'The connection is defined somewhere else...
    Command = New OracleCommand("MyTable", Me.Connection) 
    Command.CommandType = CommandType.Text

    TempDataAdapter = New OracleDataAdapter(Command)

    'Fill the table from the database 
    TempDataAdapter.FillSchema(DataSet, SchemaType.Source, Name)
    DataTable = DataTable = DataSet.Tables(0)           

代码语言:javascript
复制
    TempDataAdapter.Update(DataTable)

在创建datatable之后,我尝试从datatable : DataTable.Columns.Remove(DataTable.Columns("MyVirtualColumn"))中删除虚拟列

但是,当将数据保存回数据库时,它会返回相同的错误。

有谁能帮帮忙吗?

干杯,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-14 12:24:29

如果您不想填充或查询虚拟列,是否可以在该表上创建一个排除虚拟列的视图并使用该视图。

票数 4
EN

Stack Overflow用户

发布于 2018-08-14 04:13:38

当您将数据插入到具有虚拟列的表中时,您必须列出列,即不能使用

代码语言:javascript
复制
Insert into table_x values (x, y, z)

代码语言:javascript
复制
Insert into table_x (col1, col2, col3) values (x, y, z)

相应地编写您的.net语句。如果您尝试使用DataTable进行更新,则可以使用不包含虚拟列的视图:

代码语言:javascript
复制
CREATE OR REPLACE VIEW V_MyTable AS 
SELECT col1, col2 -- skip virtual_col3 
FROM MyTable;

如果您希望选择虚拟列,但在插入(或更新)时跳过它们,则可以使用INSTEAD OF触发器创建一个视图。会是这样的:

代码语言:javascript
复制
CREATE OR REPLACE VIEW V_MyTable AS 
SELECT col1, col2, virtual_col3
FROM MyTable;

CREATE OR REPLACE TRIGGER IO_MyTable
    INSTEAD OF INSERT OR UPDATE ON V_MyTable
    FOR EACH ROW

BEGIN

    IF UPDATING THEN
        UPDATE MyTable SET 
            col1 = :NEW.col1, 
            col2 = :NEW.col2
        WHERE primary_key_col = :OLD.primary_key_col;
    ELSIF INSERTING THEN
        INSERT INTO MyTable (col1, col2) VALUES (:NEW.col1, :NEW.col2);
    END IF;

END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51829612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档