andyyuduo 发表于 2018-9-9 12:36:09

ORACLE PL/SQL 变量的使用

  变量的使用
  PL/SQL变量
  变量的作用:
  (在DECLARE阶段被声明)
  (*每一行只声明一个变量)
  (在执行阶段被赋予新值)
  (可以在PL/SQL之间传递值)
  (通过标准输出包可以看到结果)
  变量初始化和关键字:
  identifier datatype [:= | DEFAULT expr];
   必须初始化,并且其值不能改变
   必须初始化,不能被赋予NULL值
  := 赋值操作符
  DEFAULT 赋值
  1.标量类型
  declare
  v_city varchar2(30) NOT NULL := 'Beijing';
  v_location varchar2(13) := 'Atlanta';
  v_deptno number(2) NOT NULL := 10;
  v_mgr number(6) DEFAULT 100;
  v_hiredate date;
  v_date date := to_date('20110117','yyyymmdd');
  v_rowid rowid;
  b_flag boolean;
  begin
  null;
  end;
  /
  使用PL/SQL变量的注意事项:
  PL/SQL变量和数据库标量的长度有区别:
  CHAR 32767BYTE O8DATABASE 2000BYTE O7DATABASE 256BYTE
  VARCHAR2 32767BYTE O8DATABASE 4000BYTE O7DATABASE 2000BYTE
  LONG 32760BYTE 2G
  LONG RAW 32760BYTE 2G
  列名的优先级别高于变量!
  declare
  ename varchar2(20) :='KING';
  begin
  delete emp where ename=ename;
  end;
  /
  变量输出测试:
  例题1:创建一个匿名PL/SQL块,将下列字符输出到屏幕:"today is : 在此处显示当前时间"
  set serveroutput on
  begin
  dbms_output.put_line('today is : '||sysdate);
  end;
  /
  2.复合类型变量
  数组:
  declare
  type no_list is varray (3) of number;
  x no_list :=no_list(1990,2010,1995);
  begin
  dbms_output.put_line('no_list 2 is:'||x(2));
  dbms_output.put_line('no_list 1 is:'||x(1));
  dbms_output.put_line('no_list 3 is:'||x(3));
  end;
  /
  记录(record):
  declare
  --第一个变量声明
  v_sal number(7,2);
  --第二个变量声明
  TYPE emp_record_type IS RECORD
  (ename VARCHAR2(25),
  job VARCHAR2(10),
  sal NUMBER(7,2));
  emp_record emp_record_type;
  begin
  emp_record.ename := 'Alvin';
  emp_record.job := 'clerk';
  emp_record.sal := 1000;
  dbms_output.put_line(emp_record.ename||' '||emp_record.job||' '||emp_record.sal);
  end;
  /
  声明一个变量用来保存dept表的所有列的数据!
  PL/SQL表(INDEX BY表):
  declare
  type emp_table_type is table of varchar2(20)
  index by binary_integer;
  emp_table emp_table_type;
  begin
  emp_table(0) :='Alex';
  emp_table(-1) :='X1';
  emp_table(2) :='hello';
  dbms_output.put_line('index 0 : '||emp_table(0));
  dbms_output.put_line('index -1 : '||emp_table(-1));
  dbms_output.put_line('index 2 : '||emp_table(2));
  end;
  /
  操作集合类型变量的方法:
  declare
  type emp_table_type is table of varchar2(10)
  index by varchar2(10);
  emp_table emp_table_type;
  begin
  emp_table('A') := 'KING';
  emp_table('B') := 'zjz';
  dbms_output.put_line('PL/SQL table elements numbers : '||emp_table.count);
  dbms_output.put_line('The first element index --> '||emp_table.first);
  dbms_output.put_line('The last element index --> '||emp_table.last);
  dbms_output.put_line('The index ''B'' prior element is --> '||emp_table.prior('B'));
  dbms_output.put_line('The index ''A'' next element is --> '||emp_table.next('A'));
  if emp_table.exists('A') then
  dbms_output.put_line('Index value ''A'' exists');
  dbms_output.put_line('Index A --> '||emp_table('A'));
  end if;
  dbms_output.put_line('Index B --> '||emp_table('B'));
  end;
  /
  PL/SQL表+record :
  declare
  TYPE emp_record_type IS RECORD
  (ename VARCHAR2(25),
  job VARCHAR2(10),
  sal NUMBER(7,2));
  type emp_table_type is table of emp_record_type
  index by binary_integer;
  emp_table emp_table_type;
  begin
  select ename,job,sal into emp_table(0) from emp where empno=7369;
  dbms_output.put_line('index 0 : '||emp_table(0).ename);
  emp_table(1).ename:='x';
  dbms_output.put_line('index 1 : '||emp_table(1).ename);
  end;
  /
  主机变量
  第二类:非PL/SQL变量(来源于环境或宿主语言如C,java)
  VARIABLE return_code NUMBER
  variable g_message VARCHAR2(30)
  begin
  :g_message := 'My First PL/SQL Block!';
  end;
  /
  --在SQLPUS中用print命令可以显示主机变量的值
  print g_message

页: [1]
查看完整版本: ORACLE PL/SQL 变量的使用