虽然 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 【问题描述】:在我的存储过程中,我希望 col1 和 col2 的值与员工匹配,然后插入员工的唯一记录。如果未找到,则将 col1、col2 和 col3 的值与 employee 匹配匹配然后插入值。如果在匹配所有这些列时也找不到,则使用另一列插入记录。
还有一件事我想通过传递另一列值来找到像 emp_id 这样的值列表,如果单个记录不能 match 然后制作 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;
而 emp,stud 是我必须与 txt 匹配的不同表格。 在那个存储过程中,我想以批处理模式将数据从 txt 加载到 main_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 语句出现错误,不知应该怎么将参数传入数据库?