虽然 INSERT 出现错误 PLS-00904: stud.col3 is invalid identifier

Posted

技术标签:

【中文标题】虽然 INSERT 出现错误 PLS-00904: stud.col3 is invalid identifier【英文标题】:While INSERT got error PLS-00904: stud.col3 is invalid identifier 【发布时间】:2018-05-27 09:08:17 【问题描述】:

在我的存储过程中,我希望 col1col2 的值与员工匹配,然后插入员工的唯一记录。如果未找到,则将 col1col2col3 的值与 employee 匹配匹配然后插入值。如果在匹配所有这些列时也找不到,则使用另一列插入记录。

还有一件事我想通过传递另一列值来找到像 emp_id 这样的值列表,如果单个记录不能 ma​​tch 然后制作 emp_id NULL

我还想在与 txt 匹配后一次插入一条记录,以及其他具有 emp 等数据的表。

create or replace procedure sp_ex
as
    cursor c1 is select * from txt%rowtype;
    v_col1 tbl1.col1%type;
    type record is table of txt%rowtype;  --Staging table
    v_rc record := record();
begin
    open c1;
    loop 
        fetch c1 bulk collect into v_rc limit 1000;

        loop
            for i in 1..v_rc.count loop
                select col1 into v_col1 from tbl1
                where  exists (select col1 from tbl1 where tbl1.col1 = emp.col1);

                insert 
                    when txt.col1 = emp.col1 and txt.col2 = stud.col2 then
                         into main_table(columns) values(v_rc(i).col1, ...)

                    when txt.col1 = emp.col1 and txt.col2 = stud.col2 and txt.col3 = stud.col3 then 
                         into main_table(columns) values(v_rc(i).col1, ...)

                    else 
                         insert into main_table(columns) values(v_rc(i).col1, ...)
                         select * from txt;
                end loop;
                exit when v_rc.count < limit;

        end loop;
        close c1;
end sp_ex;

empstud 是我必须与 txt 匹配的不同表格。 在那个存储过程中,我想以批处理模式将数据从 txt 加载到 ma​​in_table 中。数据将被一条一条记录匹配,然后如果匹配条件匹配则加载到主表中。我如何创建存储过程,以便在批处理中通过上述逻辑一一加载数据。你能帮我分享你的想法吗?谢谢

【问题讨论】:

【参考方案1】:

语法似乎比较混乱。

Multi-table insert是这样的:

insert all  -- alternatively, "insert first"
    when dummy = 'X' then
        into demo (id) values (1)
    when dummy = 'Y' then
        into demo (id) values (2)
    else
        into demo (id) values (3)
select * from dual;

或者您可能想要PL/SQL case statement:

case
    when dummy = 'X' then
        insert into demo (id) values (1);
    when dummy = 'Y' then
        insert into demo (id) values (2);
    else
        insert into demo (id) values (3);
end case;

相反,似乎两者兼而有之。

还缺少一个end loop,以及一个没有into 子句的隐式游标(select col1 from tbl1)。

【讨论】:

感谢您的回答。我已经这样做了,但我想知道对于每条记录,这将 txt 数据将与另一个表匹配,然后将其加载到主表中 如何首先从另一个表中匹配条件,然后将其加载到主表中。因为你在这里没有提到 MATCH 案例。你能告诉我吗,因为我在这里遇到了一些困惑。 恐怕我不明白你问题的那一部分。可能您需要insert ... select ... from ... where ...,但我需要查看一些表定义和连接条件才能更详细地发表评论。 在这个 SP 中,我们必须应用 2 种不同的逻辑。第一个逻辑是select ... from .... where,我们必须应用的另一个逻辑是insert,在匹配上述条件后的记录。应用的逻辑是什么。请告诉我。 嗯,'与上述条件匹配记录后插入' 可能是insert ... select ... from ... where ...,但正如我所说,我需要将more details 添加到问题中。跨度>

以上是关于虽然 INSERT 出现错误 PLS-00904: stud.col3 is invalid identifier的主要内容,如果未能解决你的问题,请参考以下文章

向access数据库插入出现“insert into 语法错误”

语法错误:预期输入结束,但在 bigquery 中的 [11:1] 处出现关键字 INSERT 错误

为啥会出现“INSERT INTO 语句中的语法错误”?

insert into 语句出现错误,不知应该怎么将参数传入数据库?

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误

map.insert:pair<enum,vector<*>> 出现“无效参数”错误