【发布时间】:2018-08-30 18:18:39
【问题描述】:
这是我尝试过的代码
SET SERVEROUTPUT ON;
ACCEPT input_accountNumber NUMBER PROMPT 'Enter the account number : '
ACCEPT input_branch CHAR PROMPT 'Enter the branch : '
CREATE FUNCTION activeAccounts
RETURN NUMBER IS
accountNumber NUMBER;
BEGIN
FOR rec IN (SELECT account_number, branch FROM ACCOUNT_DATA WHERE status='Active')
LOOP
INSERT INTO ACTIVE_ACCOUNTS VALUES (rec.account_number,rec.branch);
END LOOP;
END;
/
DECLARE
accountStatus VARCHAR(20);
inputuser_accountNumber NUMBER;
inputuser_branch VARCHAR(20);
cf varchar(20);
BEGIN
inputuser_accountNumber := '&input_accountNumber';
inputuser_branch := '&input_branch';
SELECT status INTO accountStatus FROM ACCOUNT_DATA;
IF (accountStatus = 'Active') THEN
cf := activeAccounts();
ELSE
DBMS_OUTPUT.PUT_LINE('The account is Inactive.');
END IF;
END;
/
问题陈述是
在 PL/SQL 中为给定的需求编写一个存储函数,并在 PL/SQL 中使用相同的函数 堵塞。 户口号码。并且分支名称将被用户接受。将在中搜索相同的内容 表 acct_details。如果帐户状态处于活动状态,则显示适当的消息以及 将帐户详细信息存储在 active_acc_details 表中,否则在屏幕上显示消息 “帐户处于非活动状态”。
错误是
错误报告 - ORA-01422:精确提取返回的数量超过请求的数量 行数
ORA-06512:第 9 行
- 00000 - “精确提取返回的行数超过了请求的行数” *原因:exact fetch 中指定的数字小于返回的行数。 *操作:重写查询或更改请求的行数
【问题讨论】:
-
您的 ACCOUNT_DATA 表可能不止一行。因此您不能在 varchar 类型的单个变量中选择更多值。你应该选择数组或只选择一个值
-
你的函数不会
return任何东西,因为return语句丢失。如果您的意图只是插入记录,您可以使用Procedures。
标签: plsql