我创建了一个存储过程。在那个存储过程中我想要的是 col1 & col2 与员工匹配,然后插入员工的唯一记录。如果未找到,则匹配 col1 , col2 &的值 col3 与 员工 匹配,然后插入值。如果在匹配所有这些列时也找不到,则使用另一列插入记录。 还有一件事我需要通过传递另一个列值找到像 emp_id 这样的值列表,如果单个记录不能匹配,那么make emp_id as NULL 。
create or replace procedure sp_ex
AS
empID_in varchar2(10);
fname_in varchar2(20);
lname_in varchar2(30);
---------
type record is ref cursor return txt%rowtype; --Staging table
v_rc record;
rc rc%rowtype;
begin
open v_rc for select * from txt;
loop
fetch v_rc into rc;
exit when v_rc%notfound;
loop
select col1 from tbl1
Where EXISTS (select col1 from tbl1 where tbl1.col1 = rc.col1);
IF txt.col1 = rc.col1 AND txt.col2 = rc.col2 THEN
insert into main_table select distinct * from txt where txt.col2 = rc.col2;
ELSIF txt.col1 = rc.col1 AND txt.col2 = rc.col2 AND txt.col3 = rc.col3 THEN
insert into main_table select distinct * from txt where txt.col2 = rc.col2;
ELSE
insert into main_table select * from txt where txt.col4 = rc.col4;
end if;
end loop;
close v_rc;
end sp_ex;
我在编译此存储过程PLS-00357: Table,View Or Sequence reference not allowed in this context
时发现错误。如何解决此问题以及如何在使用 CASE 或 IF ELSIF 语句时将值从登台插入主表。你能不能帮助我,以便我可以编译存储过程。
答案 0 :(得分:1)
由于我没有使用您的数据库,因此难以100%确定,但在我看来,读取的行
$(function () {
$("#ImageId").change(function (evt) {
var DropDownSelectedVal = $("#ImageId :selected").val();
alert(DropDownSelectedVal);
if (DropDownSelectedVal != null) {
alert("Success");
$.ajax({
url: "@Url.Action("GetImage", "CardImages")",
type: "POST",
dataType: 'json',
contentType: "application/json;charset-utf-8",
data: "{'id':'" + DropDownSelectedVal+ "'}",
success: function (data) {
alert("Success");
$("img-upload2").attr('src', data);
},
error: function (xhr) {
alert("Something went wrong, please try again");
}
});
}
});
});
应该说
rc rc%rowtype;
您已将游标rc txt%rowtype;
定义为返回v_rc
,并且与此游标一起使用的SQL语句为txt%rowtype
,但该数据类型与定义select * from txt
。因此,您似乎需要更改rc
,如图所示。
看起来rc
语句应该在LOOP
之后立即删除,因为在此之后没有任何内容可以终止该循环。
此外,您对exit when v_rc%notfound;
表格中的列有很多引用,例如txt
。您不能以这种方式引用表中的值。我不太确定你在这里做了什么,所以我无法提出任何建议。
此外,声明
IF txt.col1 = rc.col1
正在从数据库中选择一列,但并未将其放在任何位置。这应该是单身SELECT(select col1 from tbl1
Where EXISTS (select col1 from tbl1 where tbl1.col1 = rc.col1);
)或光标。
还有一件事:你不能使用SELECT..INTO
。您需要使用包含distinct *
的列列表。
也许以下内容接近您尝试做的事情:
distinct
祝你好运。