use*_*472 2 mysql oracle oracle10g
我有以下程序:
CREATE OR REPLACE PROCEDURE My_Procedure
AS
CURSOR proced IS
SELECT aID FROM A;
BEGIN
FOR row IN proced LOOP
INSERT INTO AQ VALUES (row.aID, AQ_NT(AQT('',NULL, '', '')));
DELETE TABLE (SELECT Q FROM AQ) AQT WHERE AQT.Year=NULL;
END LOOP;
END My_Procedure;
/
Run Code Online (Sandbox Code Playgroud)
并且该过程创建正常,但我在执行它时遇到问题,我使用以下命令:
EXECUTE My_Procedure;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
ERROR at line 1:
ORA-01427: single-row subquery returns more than one row
ORA-06512: at “SMITH. My_Procedure”, LINE 8
Ora-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
我已经在这几个星期,我100%肯定执行的命令是正确的.ORACLE 10G创建的程序很好,所以请您提供帮助,我可以解决这个问题.
非常感谢
只有在输入表A包含一行时,您的过程才有效.
使用DELETE TABLE(),您尝试从嵌套表(AQ.Q)中删除某些行,但DELETE TABLE()仅在您提供一个且只有一个嵌套表(即AQ的一行时)才有效.包含一个嵌套表AQ.Q,它可能包含许多嵌套行或零嵌套行).换句话说,DELETE TABLE(blabla)仅在blabla返回单行单列结果时才有效.
将两行插入AQ后,子查询(SELECT Q FROM AQ)将返回两行,并且您有一个ORA-01427错误.
旁注:在ABCade的注释后重复,AQT.Year=NULL会在SQL中产生误导性的结果,因为NULL = NULL不成立.更好用AQT.Year IS NULL.
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |