我有執行的PL/SQL程序一個奇怪的問題。
我的程序有四個VARCHAR輸入參數,並提取從表id值與這樣的查詢:查詢手續PLSQL必須返回1行,但返回更多的行
SELECT ID INTO idvar FROM TABLE T WHERE T.NAME = pn AND T.SUR = ln;
在此表中,姓名和河畔是唯一的關鍵。所以對於一對輸入參數(pn,ln),我希望只獲得一行,但不是這樣。 事實上,似乎只處理了第一個條件,而第二個條件沒有處理。
在我的表我有,這個測試行:
ID | NAME | SUR
1 | JO | SOME THING
2 | JO | OTHER ONE
3 | BO | SOME THING
如果我的過程我通過
('JO', 'SOME THING')
我獲得ID:1和2
但是,如果我傳遞值
('BO', 'SOME THING')
我只獲得ID 3.
顯然,與以前的查詢我得到錯誤ORA-01422,所以我先用遊標定義代替它,而「在(查詢)行」之後:
CURSOR C IS
SELECT ID FROM TABLE T WHERE T.NAME = pn AND T.SUR = ln;
這種行爲很奇怪,我,事實上,如果我只是從sqlplus或蟾蜍執行查詢,我會得到正確的結果。
的Oracle版本號爲8.1。提前
感謝
#這是我的程序(我希望你不要找錯配,因爲我改變對象的名稱):
CREATE OR REPLACE PROCEDURE myproc (
pn in VARCHAR2,
ln in VARCHAR2,
other in VARCHAR2,
datarif in VARCHAR2
)
AS
idT NUMBER;
idST NUMBER;
idSE NUMBER;
CURSOR C IS
SELECT ID
FROM TABLE T
WHERE
T.NAME = pn AND T.SUR = ln;
BEGIN
for x in (SELECT ID
FROM TABLE T
WHERE
T.NAME = pn AND T.SUR = ln)
loop
DBMS_OUTPUT.put_line('INFOR:' || x.ID);
end loop;
open C;
loop
fetch C into idT;
exit when C%NOTFOUND;
DBMS_OUTPUT.put_line('INLOOP:ID='||idT);
end loop;
close C;
DBMS_OUTPUT.put_line ('OUTLOOP: ID='||idT);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR(-20001, 'Exact Fetch Returned many Rows');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERROR');
ROLLBACK;
RAISE;
END myproc;
/
謝謝
你能否提出完整的程序和程序的調用(與上下文)? – Tim 2011-01-13 09:45:12
我在原帖上寫手續。 – sangi 2011-01-13 10:16:13