всем привет.
помогите пожалуйста с такой конструкцией. вот так работает
DECLARE
X1 NUMBER := 0; X2 NUMBER := 0;
BEGIN
UPDATE T1 SET C1 = 1 WHERE N1 = 3 RETURNING ID_T1 INTO X1;
IF(SQL%NOTFOUND) THEN
INSERT INTO T1 (N1,C1) VALUES (2,'1KHK') RETURNING ID_T1 INTO X2;
END IF;
COMMIT;
DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line(X1); DBMS_OUTPUT.put_line(X2);
END;
/
если хочу реализовать через EXECUTE IMMEDIATE
CREATE OR REPLACE PROCEDURE SetT3(N NUMBER,C VARCHAR2) IS
S VARCHAR2(400); X1 NUMBER := 0; X2 NUMBER := 0;
BEGIN
S := 'BEGIN UPDATE T1 SET C1 = :1 WHERE N1 = :2 RETURNING ID_T1 INTO :X1; IF(SQL%NOTFOUND) THEN INSERT INTO T1 (N1,C1) VALUES (:4,:5) RETURNING ID_T1 INTO :X2; END IF; COMMIT; END;';
EXECUTE IMMEDIATE S USING C,N,N,C RETURNING INTO X1,X2;
DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line(X1); DBMS_OUTPUT.put_line(X2);
END SetT3;
/
то дает ошибку,
ORA-06547: фраза RETURNING должна использоваться с операторами INSERT, UPDATE
а как правильно реализовать уж и не пойму