在PL/SQL过程中创建视图
我已经在论坛上看过了,但是现在这个问题没有答案。基本上,我试图在我的过程中创建一个视图,因为它比一个复杂的select语句更容易,而select语句似乎不起作用,因为它返回的“ORA-01422 exact fetch返回的行数大于请求的行数”。我将该语句放在底部以供参考 但是,视图选项似乎不起作用,因为它返回另一个错误“在预期出现以下情况时遇到了符号“CREATE:”。我做错什么了吗 谢谢你看在PL/SQL过程中创建视图,sql,oracle,plsql,Sql,Oracle,Plsql,我已经在论坛上看过了,但是现在这个问题没有答案。基本上,我试图在我的过程中创建一个视图,因为它比一个复杂的select语句更容易,而select语句似乎不起作用,因为它返回的“ORA-01422 exact fetch返回的行数大于请求的行数”。我将该语句放在底部以供参考 但是,视图选项似乎不起作用,因为它返回另一个错误“在预期出现以下情况时遇到了符号“CREATE:”。我做错什么了吗 谢谢你看 procedure proRekt (par_id number) is vardec far
procedure proRekt (par_id number) is
vardec farm.parcel.description%type;
vland farm.landuse.landuse_id%type;
v_luse farm.landuse.landuse%type;
varpl farm.parcel.parcel_id%type;
begin
create or replace view Door as
select a.parcel_id,a.description,b.landuse_id,c.landuse
from
farm.parcel a,
farm.parcel_landuse b,
farm.landuse c
where a.parcel_id = b.parcel_id
and b.landuse_id = c.landuse_id;
select parcel_id,description,landuse
into varpl,
vardec,
vland
from door
where parcel_id = parID;
****错误的select语句
select a.parcel_id,c.description,a.landuse_id,b.landuse
into varpl,
vardec,
vland,
v_luse
from farm.parcel_landuse a,
farm.landuse b,
farm.parcel c
where c.parcel_id = parID
and a.landuse_id = b.landuse_id
and a.parcel_id = c.parcel_id;
在SQL作用域中创建视图:
create or replace view Door as
select a.parcel_id,
a.description,
b.landuse_id,
c.landuse
from tithedb.parcel a
INNER JOIN tithedb.parcel_landuse b
ON ( a.parcel_id = b.parcel_id )
INNER JOIN tithedb.landuse c
ON ( b.landuse_id = c.landuse_id );
在过程的PL/SQL范围内使用它:
procedure proexempt (parID number)
is
vardescription tithedb.parcel.description%type;
varland tithedb.landuse.landuse_id%type;
varlanduse tithedb.landuse.landuse%type;
varparcel tithedb.parcel.parcel_id%type;
begin
select parcel_id,
description,
landuse
into varparcel,
vardescription,
varlanduse
from door
where parcel_id = parID;
-- ... more stuff
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL; -- Handle error here.
WHEN TOO_MANY_ROWS THEN
NULL; -- Handle error here (or use "AND ROWNUM = 1" in your query).
END proexempt;
/
不是oracle用户,但选择进入结构是错误的。。。选择从中插入还是尝试插入到多个表中?它的pl/sql所以需要选择与sql稍有不同的变量。我明白了。。是否应该查找varTNo变量?如果要创建视图,那么为什么应该通过存储过程创建它?您可以通过存储过程直接创建视图并从中选择数据。
create view
是一个SQL命令,而不是PL/SQL命令。如果需要在PL/SQL中使用它,则必须使用executeimmediate
。但是,就你现在所做的来说,SQL似乎很好。谢谢!!!这个期望解决了我的问题。首先运行它,它使用了expection,但由于某种原因,它没有返回所有数据,它抛出了大多数情况下的“太多行”异常。所以我按照u的建议做了,并在查询中放置和Rownum<2,删除了异常及其工作状态。