本帖最后由 苏上人 于 2013-10-27 13:59 编辑
苏大师的回答各位小伙伴门 一起来讨论啊可是苏大师的我没明啊 不是 EXECUTE IMMEDIATE 后面跟SQL怎么苏大师把 RETURNING n INTO :n' 这些东西放到SQL语句里面啊 我看网上这些例子啥的 都是把into或者 RETURNING 都在SQL 外面啊我是不是很笨啊这个搞不明白啊
create table t (id number, n number);
insert into t values (1,1);
insert into t values (2,2);
----- RETURNING INTO 可以
DECLARE
lv_n NUMBER;
BEGIN
EXECUTE IMMEDIATE 'UPDATE t SET n=100 WHERE id=2 RETURNING n INTO :n' RETURNING INTO lv_n;
DBMS_OUTPUT.PUT_LINE(lv_n);
END;
/
----- USING OUT也可以
DECLARE
lv_n NUMBER;
BEGIN
EXECUTE IMMEDIATE 'UPDATE t SET n=100 WHERE id=2 RETURNING n INTO :n' USING OUT lv_n;
DBMS_OUTPUT.PUT_LINE(lv_n);
END;
/
----- INTO不可以
DECLARE
lv_n NUMBER;
BEGIN
EXECUTE IMMEDIATE 'UPDATE t SET n=100 WHERE id=2 RETURNING n INTO :n' INTO lv_n;
DBMS_OUTPUT.PUT_LINE(lv_n);
END;
/
-------如果是SELECT而非DML(INSERT/DELETE/UPATE), 可以用INTO
DECLARE
lv_n NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT n FROM t WHERE id=2 ' INTO lv_n;
DBMS_OUTPUT.PUT_LINE(lv_n);
END;