Sql 使用什么:记录还是光标?

Sql 使用什么:记录还是光标?,sql,oracle11g,cursor,record,Sql,Oracle11g,Cursor,Record,创建PL/SQL块以检索和显示指定月份内所有认捐的数据。应为每个质押显示一行输出。在每行输出中包括以下内容: •质押ID、捐赠者ID和质押金额 •如果质押是一次性支付的,则显示“一次性支付”。 •如果抵押物是按月支付的,则显示“每月-”,表示支付的月数 •列表应进行排序,以首先显示所有一次性认捐 这是桌子结构 CREATE TABLE DD_Pledge ( idPledge number(5), idDonor num

创建PL/SQL块以检索和显示指定月份内所有认捐的数据。应为每个质押显示一行输出。在每行输出中包括以下内容:

•质押ID、捐赠者ID和质押金额 •如果质押是一次性支付的,则显示“一次性支付”。 •如果抵押物是按月支付的,则显示“每月-”,表示支付的月数 •列表应进行排序,以首先显示所有一次性认捐

这是桌子结构

CREATE TABLE DD_Pledge (
                   idPledge number(5),
                   idDonor number(4),
                   Pledgedate DATE,
                   Pledgeamt number(8,2),
                   idProj number(5),
                   idStatus number(2),
                   Writeoff number(8,2),
                   paymonths number(3),
                   Campaign number(4),
                   Firstpledge char(1),
                   CONSTRAINT pledge_id_pk PRIMARY KEY(idPledge),
                   CONSTRAINT pledge_idDonor_fk FOREIGN KEY (idDonor)
                           REFERENCES dd_donor (idDonor), 
                   CONSTRAINT pledge_idProj_fk FOREIGN KEY (idProj)
                           REFERENCES dd_project (idProj),
                   CONSTRAINT pledge_idStatus_fk FOREIGN KEY (idStatus)
                           REFERENCES dd_status (idStatus)); 
我尝试使用记录,但似乎记录不起作用,因为当指定的月份有多个承诺时,它会给我错误。有没有一种方法可以使用记录来完成这项任务,因为这是一项任务,我们在完成记录后再做

也许光标将是一个很好的选择,但由于前面提到的问题,我想知道解决这个问题的方法是什么

SELECT
  p.idPledge,
  p.idDonor,
  p.Pledgeamt as this_payment,
  case 
    when p.paymonths = 0 then 'Lump Sum'
    else 'Monthly - ' || p.paymonths 
  end as payment_method
FROM
  dd_pledge p
WHERE
  TRUNC(p.Pledgedate) >= '01-Mar-2010' AND TRUNC(p.Pledgedate) < '01-Apr-2010'  
order by
  4 

假设您将根据需要添加月份的开始/结束日期。

包括表定义的副本,即它们包含哪些列、哪些是主键、哪些是外键/相关键、它们是什么类型等。简而言之,听起来您所做的事情不需要光标。没有任何东西需要光标。@Sepster我编辑了这个问题抱歉,我的错,我在做另一个问题,那么我在这里哪里可以找到是按月付款还是一次性付款?不管怎样,我的答案中的案例陈述无疑为您提供了解决单个表的问题所需的线索?您所说的“记录”是什么意思?您是否使用select获得ORA-02112错误。。。进入当不止一排的时候?这是意料之中的,您需要使用游标来迭代这些值。这并不需要PL/SQL块,它可以在SQL中完成,正如@Sepster所示,但因为这是一个练习。。。