如何执行一个简单的存储pl / sql?

时间:2014-04-18 09:29:42

标签: sql oracle plsql oracle11g

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 –

但没有输出......如何打印输出? 如果你让我知道哪里出错了,请欣赏!

2 个答案:

答案 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;

而不是正常的选择语句