pl / sql中的变量。这段代码在做什么?

时间:2018-11-29 12:58:26

标签: oracle plsql

我读过《 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. 

1 个答案:

答案 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游标。