我需要检索捐款人的姓名,电子邮件和质押金额以获得最高质押金额。如果承诺关闭,它必须显示一个感谢信,如果不显示快点。使用以下格式显示:捐赠者姓名,承诺金额,电子邮件和消息。 这是我到目前为止写的代码。
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:
答案 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(),您必须使用单独的查询。如果您希望将来一次又一次地使用此查询,也可以使用用户光标。
一个重要的事情当您使用连接并显示两个表中的列时,您必须在列名称之前附加表名/表对象