我读过《 Oracle数据库体系结构专家》一书
我发现我不理解此代码,我不理解这种编写变量的方式。这些是全局变量吗?
我该如何检查表中所有行的时间戳,而不仅仅是deptno 10?
ops$tkyte%ORA11GR2> variable deptno number
ops$tkyte%ORA11GR2> variable dname varchar2(14)
ops$tkyte%ORA11GR2> variable loc varchar2(13)
ops$tkyte%ORA11GR2> variable last_mod varchar2(50)
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> begin
2 :deptno := 10;
3 select dname, loc, to_char( last_mod, 'DD-MON-YYYY HH.MI.SSXFF AM TZR' )
4 into :dname,:loc,:last_mod
5 from dept
6 where deptno = :deptno;
7 end;
8 /
PL/SQL procedure successfully completed.
答案 0 :(得分:2)
这些变量已在SQL * Plus中定义。作者使用它们来避免在PL / SQL匿名块中声明,并使用PRINT
命令显示它们的值:
SQL> var dname varchar2(10)
SQL>
SQL> begin
2 select dname
3 into :dname
4 from dept
5 where deptno = 10;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> print dname
DNAME
--------------------------------
ACCOUNTING
SQL>
另一个选项(使用DBMS_OUTPUT.PUT_LINE
来显示值)
SQL> set serveroutput on
SQL> declare
2 l_dname varchar2(10);
3 begin
4 select dname
5 into l_dname
6 from dept
7 where deptno = 10;
8
9 dbms_output.put_line(l_dname);
10 end;
11 /
ACCOUNTING
PL/SQL procedure successfully completed.
SQL>
从 all 时间戳开始:您将删除参数(在WHERE
子句中),但是-由于表中有很多行,您将得到TOO_MANY_ROWS
错误,因此,例如,您必须循环执行操作或返回ref游标。