在PL/SQL过程中创建视图

在PL/SQL过程中创建视图,sql,oracle,plsql,Sql,Oracle,Plsql,我已经在论坛上看过了,但是现在这个问题没有答案。基本上,我试图在我的过程中创建一个视图,因为它比一个复杂的select语句更容易,而select语句似乎不起作用,因为它返回的“ORA-01422 exact fetch返回的行数大于请求的行数”。我将该语句放在底部以供参考 但是,视图选项似乎不起作用,因为它返回另一个错误“在预期出现以下情况时遇到了符号“CREATE:”。我做错什么了吗 谢谢你看 procedure proRekt (par_id number) is vardec far

我已经在论坛上看过了,但是现在这个问题没有答案。基本上,我试图在我的过程中创建一个视图,因为它比一个复杂的select语句更容易,而select语句似乎不起作用,因为它返回的“ORA-01422 exact fetch返回的行数大于请求的行数”。我将该语句放在底部以供参考

但是,视图选项似乎不起作用,因为它返回另一个错误“在预期出现以下情况时遇到了符号“CREATE:”。我做错什么了吗

谢谢你看

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,删除了异常及其工作状态。