有奖活动:PL/SQL Challenge 每日一题:2012-11-12 动态SQL的输出绑定

[复制链接]
查看11 | 回复5 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得奥运章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得奥运章一枚。
以往旧题索引:
http://www.itpub.net/thread-1499223-1-1.html
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
难度:中
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
哪些选项在执行之后会显示"100"?
(A)
DECLARE
l_value INTEGER;
BEGIN
EXECUTE IMMEDIATE
'declare :myvar INTEGER; begin :myvar := 100; end;'
USING OUT l_value;
DBMS_OUTPUT.put_line (l_value);
END;
/

(B)
DECLARE
l_value INTEGER;
BEGIN
EXECUTE IMMEDIATE 'begin :myvar := 100; end;'
USING OUT l_value;
DBMS_OUTPUT.put_line (l_value);
END;
/

(C)
DECLARE
l_value INTEGER;
BEGIN
EXECUTE IMMEDIATE
'declare :myvar INTEGER; begin :myvar := 100; end;'
USING l_value, OUT l_value;
DBMS_OUTPUT.put_line (l_value);
END;
/

(D)
DECLARE
l_value INTEGER;
BEGIN
BEGIN
EXECUTE IMMEDIATE ':myvar := 100;' USING OUT l_value;
END;
DBMS_OUTPUT.put_line (l_value);
END;
/

(E)
DECLARE
l_value INTEGER;
BEGIN
EXECUTE IMMEDIATE
'declare l_var integer;
begin l_var := 100; :my_var := l_var; end;'
USING OUT l_value;
DBMS_OUTPUT.put_line (l_value);
END;
/

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案:BE
A:多了declare :myvar INTEGER;绑定变量只是占位符,不需要声明,这里会报错
B:正常用法
C:和A一样,而且USING l_value, OUT l_value;这样的写法也不对
语法规定是USING[IN|OUT|IN OUT]bind_argument1...
D:动态sql中缺少了begin,end
E:动态sql声明临时变量可以,用临时变量中转一下,不影响结果
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
学习!
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
额,学习
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案BE, 2楼得奖。注意E的做法是不推荐的,没必要在动态代码块中多定义一个变量。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
大家都来支持一下:
http://www.itpub.net/thread-1739296-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行