enter code here
编辑后
这是我第一个存储的pl / sql程序。我将它解释为可能导致错误的基本原因:
我有一张帐户表:
BSB# CUSTOMER# ACCOUNT# TYPE BALANCE
------ ---------- ---------- -------------------- ----------
012878 123456 12345678 Saving 1234.52
012878 123456 22345678 credit -1534.52
012878 123456 32345678 Home loan -453234.52
012878 123458 11001234 SAVING 3213.54
012878 123458 21001234 Credit -120.34
我正在尝试从用户输入中提示帐户类型并显示BSB#。这是我的pl / sql:
CREATE OR REPLACE PROCEDURE AQ (loan_type IN ACCOUNT.TYPE%TYPE) IS
BSB_NUMBER ACCOUNT.BSB#%TYPE;
BEGIN
SELECT A.BSB#
INTO BSB_NUMBER
FROM ACCOUNT A
WHERE LOWER(A.TYPE) = LOAN_TYPE;
DBMS_OUTPUT.PUT_LINE(BSB_NUMBER);
DBMS_OUTPUT.PUT_LINE('HELLO');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Error ! There is no such account');
END AQ;
/
将此文件放入当前目录后,我输入:
@AQ.sql
输出:
Procedure created.
为了执行,我输入:
SQL>
SQL>
SQL> EXECUTE AQ('SAVING');
ERROR at line 1: ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at "BKG988.AQ", line 4 ORA-06512: at line 1 –
但没有输出......如何打印输出? 如果你让我知道哪里出错了,请欣赏!
答案 0 :(得分:0)
声明中的错误非常明显。由于您的select
语句返回的结果超过1,因此无法将其存储到单个变量中。您可以在trigger
内写一个procedure
来获取输出。
问候。
答案 1 :(得分:0)
问题是保存记录有几个值作为结果集返回。 Oracle Variable一次只能包含一个值。如果你想让它们拥有多个值,你应该使用, 瓦雷 2.嵌套表 3.关联数组。
但是除了那些之外,你可以通过从Ref Cursror
执行select语句来解决你的问题OPEN c_cur for SELECT A.BSB#FROM ACCOUNT A. WHERE LOWER(A.TYPE)= LOAN_TYPE;
而不是正常的选择语句