创建PL / SQL块以检索特定数据

时间:2015-03-14 01:21:40

标签: sql oracle plsql

我需要检索捐款人的姓名,电子邮件和质押金额以获得最高质押金额。如果承诺关闭,它必须显示一个感谢信,如果不显示快点。使用以下格式显示:捐赠者姓名,承诺金额,电子邮件和消息。 这是我到目前为止写的代码。

SET SERVEROUTPUT ON

DECLARE

pledge_amount     DD_PLEDGE.PLEDGEAMT%type;
first_name        DD_DONOR.FIRSTNAME%type;
last_name         DD_DONOR.LASTNAME%type;
email_address     DD_DONOR.EMAIL%type;
id_status         DD_PLEDGE.IDSTATUS%type;
display_msg CHAR(20);

BEGIN
SELECT FIRSTNAME, LASTNAME, EMAIL, PLEDGEAMT, IDSTATUS
INTO first_name, last_name, email_address, pledge_amount, id_status
FROM DD_PLEDGE, DD_DONOR
where DD_PLEDGE.IDDONOR = DD_DONOR.IDDONOR
and DD_PLEDGE.IDDONOR = max(pledgeamt)
Group BY FIRSTNAME, LASTNAME, EMAIL, PLEDGEAMT, IDSTATUS;
IF id_status = '40' THEN
display_msg = Thank You;
ELSE
display_msg = Hurry Up;
END IF;

DBMS_OUTPUT.PUT_LINE(
' First Name ' || first_name
||' Last Name ' || last_name
||' Pledge Amount: ' || pledge_amount
||' Email ' || email_address
||' MSG ' || display_msg
);

end;

代码后我遇到以下问题

Error report -
ORA-06550: line 15, column 25:
PL/SQL: ORA-00934: group function is not allowed here
ORA-06550: line 11, column 1:
PL/SQL: SQL Statement ignored
ORA-06550: line 18, column 13:
PLS-00103: Encountered the symbol "=" when expecting one of the following:

   := . ( @ % ;
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

1 个答案:

答案 0 :(得分:0)

DECLARE

pledge_amount     DD_PLEDGE.PLEDGEAMT%type;
first_name        DD_DONOR.FIRSTNAME%type;
last_name         DD_DONOR.LASTNAME%type;
email_address     DD_DONOR.EMAIL%type;
id_status         DD_PLEDGE.IDSTATUS%type;
display_msg CHAR(20);
max_amount        DD_PLEDGE.PLEDGEAMT%type;

BEGIN

select max(pledgeamt) into max_amount from DD_DONOR;

SELECT dd.FIRSTNAME, dd.LASTNAME, dd.EMAIL, dp.PLEDGEAMT, dp.IDSTATUS 
INTO first_name, last_name, email_address, pledge_amount, id_status
FROM DD_PLEDGE dp , DD_DONOR dd
where dp.IDDONOR = dd.IDDONOR
and dp.IDDONOR = max_amount;

IF id_status = '40' THEN
display_msg = Thank You;
ELSE
display_msg = Hurry Up;
END IF;

DBMS_OUTPUT.PUT_LINE(
' First Name ' || first_name
||' Last Name ' || last_name
||' Pledge Amount: ' || pledge_amount
||' Email ' || email_address
||' MSG ' || display_msg
);

end;

你没有任何聚合函数,所以需要按功能分组。

对于where子句中的MAX(),您必须使用单独的查询。如果您希望将来一次又一次地使用此查询,也可以使用用户光标。

一个重要的事情当您使用连接并显示两个表中的列时,您必须在列名称之前附加表名/表对象