Помогите с RETURNING

до сессии недолго
Дата: 03.12.2009 10:25:26
всем привет.
помогите пожалуйста с такой конструкцией. вот так работает
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
а как правильно реализовать уж и не пойму
Вячеслав Любомудров
Дата: 03.12.2009 10:29:47
execute immediate s into ... using ...
Elic
Дата: 03.12.2009 10:29:51
до сессии недолго
а как правильно реализовать уж и не пойму
Тоже через using, только out.
Elic
Дата: 03.12.2009 10:32:47
Вячеслав Любомудров
execute immediate s into ... using ...
RTFM EXECUTE IMMEDIATE ... INTO ... (FAQ)
Elic
Дата: 03.12.2009 10:34:23
до сессии недолго, заодно RTFM Using Duplicate Placeholders (FAQ)
до сессии недолго
Дата: 03.12.2009 10:47:09
Elic,
Спасибо, получилось.