Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建PL/SQL块以检索特定数据_Sql_Oracle_Plsql - Fatal编程技术网

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

创建PL/SQL块以检索特定数据,sql,oracle,plsql,Sql,Oracle,Plsql,我需要检索捐赠者的姓名、电子邮件和最高认捐额的认捐额。如果抵押已关闭,则必须显示感谢信(如果未显示,则必须显示“快点”)。使用以下格式显示:捐赠者姓名、认捐金额、电子邮件和消息。 这是我到目前为止写的代码 SET SERVEROUTPUT ON DECLARE pledge_amount DD_PLEDGE.PLEDGEAMT%type; first_name DD_DONOR.FIRSTNAME%type; last_name DD_DONOR.LAS

我需要检索捐赠者的姓名、电子邮件和最高认捐额的认捐额。如果抵押已关闭,则必须显示感谢信(如果未显示,则必须显示“快点”)。使用以下格式显示:捐赠者姓名、认捐金额、电子邮件和消息。 这是我到目前为止写的代码

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:
您没有使用任何聚合函数,因此需要按函数分组

对于MAX in where子句,必须使用单独的查询。如果您想在将来反复使用此查询,还可以使用用户游标


在使用join和DISPLAY两个表中的列时,有一点很重要,那就是必须在列的名称之前附加表名/表对象

为什么有group by子句而没有聚合函数?这是我第一次在PL/SQL中基于我所看到的其他工作编写此函数,所以我甚至不知道是否需要group by子句或者什么是聚合函数。您不能直接使用此MaxQuantieamt,您需要编写子查询。请提供这两个表的结构,以便我们可以帮助您使用此选项将名字、姓氏、电子邮件、抵押物、IDSTATUS转换为名字、姓氏、电子邮件地址、抵押物金额、DD_质押的id_状态,其中DD_质押。IDDONOR=DD_质押。IDDONOR和DD_质押。IDDONOR=从DD_质押中选择最大抵押物;还可以通过无需删除组。dp.idconsor=从DD\u consor中选择maxsharveeamt是错误的。否,仍然不正确。IDProvider,一个可以和一美元相比的ID,是什么呢?@OldProgrammer:我只是帮他消除了因为MAX的错误。现在他可以执行PL/SQL块了,我们不能保证逻辑正确@安德烈·伊尔尼茨基:你必须提供你的表结构来帮助你进一步解决这个问题。
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;