创建 pl/sql 过程以从不同的表中获取不同的列

Posted

技术标签:

【中文标题】创建 pl/sql 过程以从不同的表中获取不同的列【英文标题】:creating pl/sql procedure to get different columns from different tables 【发布时间】:2015-07-01 07:06:14 【问题描述】:

我正在尝试创建一个程序来从不同表的不同列中获取数据。我已经编写了这段代码,但出现错误 PLS-00103:在期待其中之一时遇到符号“DECLARE” 以下: 开始函数包编译指示程序子类型类型使用 形式 当前光标外部语言 符号“begin”被“DECLARE”取代以继续。任何人都可以

create or replace procedure List_of_mfi
(

cq out sys_refcursor

)
as

begin

    open cq for SELECT a.mfi_name, 
   b.mfi_type_name, 
   c.mfi_tier_name, 
   d.mfi_state_name,
   e.mfi_district_name, 
   a.mfi_phone_no 
   FROM   mfi_master a, 
   mfi_type_master b,mfi_tier_new c,mfi_state_master d,mfi_district_master e
   WHERE  a.mfi_type_id = b.mfi_type_id(+) 
   and a.mfi_tier_id = c.mfi_tier_id(+) 
   and a.mfi_state_id = d.mfi_state_id(+)
   and a.MFI_DISTRICT_ID=e.MFI_DISTRICT_ID(+);
end;

declare
cq  sys_refcursor;
mfi_name varchar2(150);
mfi_type_name varchar2(150);
mfi_tier_name varchar2(150);
mfi_state_name varchar2(150);
mfi_district_name varchar2(150);
mfi_phone_no varchar2(150);
--SELECT a.mfi_name, b.mfi_type_name, c.mfi_tier_name, d.mfi_state_name,e.mfi_district_name, a.mfi_phone_no 


begin
    List_of_mfi(cq);
    loop

     fetch cq into mfi_name,mfi_type_name,mfi_tier_name,mfi_state_name,mfi_district_name,mfi_phone_no;

     EXIT WHEN cq%NOTFOUND;

    --print 
    dbms_output.put_line('mfi_name:'||mfi_name);
    dbms_output.put_line('mfi_type_name:'||mfi_type_name);
    dbms_output.put_line('mfi_tier_name:'||mfi_tier_name);
    dbms_output.put_line('mfi_state_name:'||mfi_state_name);
    dbms_output.put_line('mfi_district_name:'||mfi_district_name);
    dbms_output.put_line('mfi_phone_no:'||mfi_phone_no);

    end loop;
end;

由于我是初学者,我不知道这段代码是正确还是错误。我想了解如何使用 oracle 报告生成器对其进行编辑并使其工作。谢谢大家。

【问题讨论】:

在过程定义后尝试使用/ 【参考方案1】:
end;

declare

在执行另一个 PL/SQL 匿名块强>。

在每个 END 之后加上“/”:

END;
/

【讨论】:

@k1j 不客气。请将其标记为已回答,这将对其他人有所帮助。

以上是关于创建 pl/sql 过程以从不同的表中获取不同的列的主要内容,如果未能解决你的问题,请参考以下文章

优化查询以从不同的表中获取唯一(用户)记录

创建在循环内输出不同名称的 Oracle PL/SQL 过程

PL/SQL 使用一张表中的列数据更新表,基于不同表之间的相等性

将 PL/SQL ETL 流程翻译成 HiveQL

将修改后的表中的游标用于相同的 PL/SQL 过程

PL SQL 过程错误